[VOL-2778] Handling IGMP
Change-Id: I54c26bc438a144c7d4c64a9b3d543461fc743ab2
diff --git a/internal/bbsim/packetHandlers/filters.go b/internal/bbsim/packetHandlers/filters.go
index 9ada88c..c46f87d 100644
--- a/internal/bbsim/packetHandlers/filters.go
+++ b/internal/bbsim/packetHandlers/filters.go
@@ -30,6 +30,13 @@
return false
}
+func IsIgmpPacket(pkt gopacket.Packet) bool {
+ if igmpLayer := pkt.Layer(layers.LayerTypeIGMP); igmpLayer != nil {
+ return true
+ }
+ return false
+}
+
func IsLldpPacket(pkt gopacket.Packet) bool {
if layer := pkt.Layer(layers.LayerTypeLinkLayerDiscovery); layer != nil {
return true
@@ -78,11 +85,13 @@
}
// returns wether it's an EAPOL or DHCP packet, error if it's none
-func IsEapolOrDhcp(pkt gopacket.Packet) (PacketType, error) {
+func GetPktType(pkt gopacket.Packet) (PacketType, error) {
if pkt.Layer(layers.LayerTypeEAP) != nil || pkt.Layer(layers.LayerTypeEAPOL) != nil {
return EAPOL, nil
} else if IsDhcpPacket(pkt) {
return DHCP, nil
+ } else if IsIgmpPacket(pkt) {
+ return IGMP, nil
}
- return UNKNOWN, errors.New("packet-is-neither-eapol-or-dhcp")
+ return UNKNOWN, errors.New("unknown-packet-type")
}
diff --git a/internal/bbsim/packetHandlers/filters_test.go b/internal/bbsim/packetHandlers/filters_test.go
index 8d5f96a..c182e82 100644
--- a/internal/bbsim/packetHandlers/filters_test.go
+++ b/internal/bbsim/packetHandlers/filters_test.go
@@ -20,6 +20,7 @@
"github.com/google/gopacket"
"github.com/google/gopacket/layers"
"github.com/opencord/bbsim/internal/bbsim/packetHandlers"
+ "github.com/opencord/bbsim/internal/bbsim/responders/igmp"
"gotest.tools/assert"
"net"
"testing"
@@ -62,6 +63,29 @@
assert.Equal(t, res, false)
}
+func Test_IsIgmpPacket(t *testing.T) {
+ igmp := &igmp.IGMP{
+ Type: layers.IGMPMembershipReportV2, //IGMPV2 Membership Report
+ Checksum: 0,
+ GroupAddress: net.IPv4(224, 0, 0, 22),
+ Version: 2,
+ }
+ buffer := gopacket.NewSerializeBuffer()
+ options := gopacket.SerializeOptions{
+ ComputeChecksums: true,
+ FixLengths: true,
+ }
+
+ if err := gopacket.SerializeLayers(buffer, options, igmp); err != nil {
+ t.Fatal(err)
+ }
+
+ pkt := gopacket.NewPacket(buffer.Bytes(), layers.LayerTypeIGMP, gopacket.DecodeOptions{})
+
+ res := packetHandlers.IsIgmpPacket(pkt)
+ assert.Equal(t, res, true)
+}
+
func Test_IsLldpPacket_True(t *testing.T) {
layer := &layers.LinkLayerDiscovery{
PortID: layers.LLDPPortID{
diff --git a/internal/bbsim/packetHandlers/packetTypes.go b/internal/bbsim/packetHandlers/packetTypes.go
index fe424f0..c89443b 100644
--- a/internal/bbsim/packetHandlers/packetTypes.go
+++ b/internal/bbsim/packetHandlers/packetTypes.go
@@ -22,6 +22,7 @@
UNKNOWN PacketType = iota
EAPOL
DHCP
+ IGMP
)
func (t PacketType) String() string {
@@ -29,6 +30,7 @@
"UNKNOWN",
"EAPOL",
"DHCP",
+ "IGMP",
}
return names[t]
}