[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]
 }