[SEBA-269] SIAB: DHCP packets not trapped to controller
[SEBA-341] Ponsim: Add secondary flows to OLT to trap c-tagged DHCP/EAPOL
[VOL-1301] Ponsim: Use innermost 802.1Q header for matching Ethernet type
[VOL-1302] Ponsim: Fix packet-out for QinQ-tagged packets
Change-Id: I1fcbcd793f477bd8d4f1df02098772465743ddd3
diff --git a/ponsim/v2/common/net_utils.go b/ponsim/v2/common/net_utils.go
index d203883..e9f66df 100644
--- a/ponsim/v2/common/net_utils.go
+++ b/ponsim/v2/common/net_utils.go
@@ -105,7 +105,18 @@
}
return dot1q
}
-
+func GetLastDot1QLayer(frame gopacket.Packet) *layers.Dot1Q {
+ var dot1q *layers.Dot1Q
+ for _, layer := range frame.Layers() {
+ if layer.LayerType() == layers.LayerTypeDot1Q {
+ if adot1q, _ := layer.(*layers.Dot1Q); adot1q.NextLayerType() != layers.LayerTypeDot1Q {
+ dot1q = adot1q
+ break
+ }
+ }
+ }
+ return dot1q
+}
func GetIpLayer(frame gopacket.Packet) *layers.IPv4 {
ip := &layers.IPv4{}
if ipLayer := frame.Layer(layers.LayerTypeIPv4); ipLayer != nil {