- cls.pg_add_stream(i, packets)
- # Based on the verbosity level set in the system print the log.
- cls.log("Sending broadcast eth frames for MAC learning", 1)
- cls.pg_start()
- # Packet stream capturing is not started as we don't need to read
- # the output.
- ## @var n_int
- # Integer variable to store the number of interfaces.
- ## @var macs_per_if
- # Integer variable to store the number of MAC addresses per interface.
- ## @var start_nr
- # Integer variable to store the starting number of the range used to
- # generate MAC addresses for the interface.
- ## @var end_nr
- # Integer variable to store the ending number of the range used to
- # generate MAC addresses for the interface.
- ## @var MY_MACS
- # Dictionary variable to store list of MAC addresses per interface.
- ## @var MY_IP4S
- # Dictionary variable to store list of IPv4 addresses per interface.
-
- ## Class method to add dot1q or dot1ad layer to the packet.
- # Based on sub-interface data of the defined interface add dot1q or dot1ad
- # Ethernet header layer to the packet.
- # @param cls The class pointer.
- # @param i Integer variable to store the index of the interface.
- # @param packet Object variable to store the packet where to add dot1q or
- # dot1ad layer.
- # TODO: Move this class method to utils.py.
- @classmethod
- def add_dot1_layers(cls, i, packet):
- assert(type(packet) is Ether)
- payload = packet.payload
- if isinstance(cls.INT_DETAILS[i], cls.Dot1QSubint):
- packet.remove_payload()
- packet.add_payload(Dot1Q(vlan=cls.INT_DETAILS[i].vlan) / payload)
- elif isinstance(cls.INT_DETAILS[i], cls.Dot1ADSubint):
- packet.remove_payload()
- packet.add_payload(Dot1Q(vlan=cls.INT_DETAILS[i].outer_vlan,
- type=0x8100) /
- Dot1Q(vlan=cls.INT_DETAILS[i].inner_vlan) /
- payload)
- packet.type = 0x88A8
- ## @var payload
- # Object variable to store payload of the packet.
- ## @var INT_DETAILS
- # Dictionary variable to store data about interfaces.
- ## @var Dot1QSubint
- # Class variable representing dot1q sub-interfaces.
- ## @var Dot1ADSubint
- # Class variable representing dot1ad sub-interfaces.
-
- ## Method to remove dot1q or dot1ad layer from the packet.
- # Based on sub-interface data of the defined interface remove dot1q or
- # dot1ad layer from the packet.
- # @param cls The class pointer.
- # @param i Integer variable to store the index of the interface.
- # @param packet Object variable to store the packet where to remove dot1q
- # or dot1ad layer.
- def remove_dot1_layers(self, i, packet):
- self.assertEqual(type(packet), Ether)
- payload = packet.payload
- if isinstance(self.INT_DETAILS[i], self.Dot1QSubint):
- self.assertEqual(type(payload), Dot1Q)
- self.assertEqual(payload.vlan, self.INT_DETAILS[i].vlan)
- payload = payload.payload
- elif isinstance(self.INT_DETAILS[i], self.Dot1ADSubint): # TODO: change 88A8 type
- self.assertEqual(type(payload), Dot1Q)
- self.assertEqual(payload.vlan, self.INT_DETAILS[i].outer_vlan)
- payload = payload.payload
- self.assertEqual(type(payload), Dot1Q)
- self.assertEqual(payload.vlan, self.INT_DETAILS[i].inner_vlan)
- payload = payload.payload
- packet.remove_payload()
- packet.add_payload(payload)
- ## @var payload
- # Object variable to store payload of the packet.
- ## @var INT_DETAILS
- # Dictionary variable to store data about interfaces.
- ## @var Dot1QSubint
- # Class variable representing dot1q sub-interfaces.
- ## @var Dot1ADSubint
- # Class variable representing dot1ad sub-interfaces.