def add_port(self, port): ofmsgs = [] if port.vlans(): mirror_act = port.mirror_actions() tagged_ofmsgs = [] for vlan in port.tagged_vlans: tagged_ofmsgs.append( self._port_add_vlan_rules(port, vlan, mirror_act, push_vlan=False)) untagged_ofmsgs = [] native_vlan = self._native_vlan(port) if native_vlan is not None: untagged_ofmsgs.append( self._port_add_vlan_rules(port, native_vlan, mirror_act)) # If no untagged VLANs, add explicit drop rule for untagged packets. if port.count_untag_vlan_miss and not untagged_ofmsgs: untagged_ofmsgs.append( self.vlan_table.flowmod(self.vlan_table.match( in_port=port.number, vlan=NullVLAN()), priority=self.low_priority)) ofmsgs.extend(tagged_ofmsgs) ofmsgs.extend(untagged_ofmsgs) if port.lacp: ofmsgs.append( self.vlan_table.flowcontroller( self.vlan_table.match( in_port=port.number, eth_type=valve_of.ether.ETH_TYPE_SLOW, eth_dst=valve_packet.SLOW_PROTOCOL_MULTICAST), priority=self.dp_highest_priority, max_len=valve_packet.LACP_SIZE)) ofmsgs.extend(self.lacp_advertise(port)) return ofmsgs
def add_port(self, port): ofmsgs = super().add_port(port) # If this is a stacking port, accept all VLANs (came from another FAUCET) if port.stack: # Actual stack traffic will have VLAN tags. ofmsgs.append( self.vlan_table.flowdrop(match=self.vlan_table.match( in_port=port.number, vlan=NullVLAN()), priority=self.low_priority + 1)) ofmsgs.append( self.vlan_table.flowmod( match=self.vlan_table.match(in_port=port.number), priority=self.low_priority, inst=self.pipeline.accept_to_classification())) return ofmsgs
def _port_add_vlan_rules(self, port, vlan, mirror_act, push_vlan=True): actions = copy.copy(mirror_act) match_vlan = vlan if push_vlan: actions.extend(valve_of.push_vlan_act( self.vlan_table, vlan.vid)) match_vlan = NullVLAN() if self.has_externals: if port.loop_protect_external: actions.append(self.vlan_table.set_no_external_forwarding_requested()) else: actions.append(self.vlan_table.set_external_forwarding_requested()) inst = ( valve_of.apply_actions(actions), self.vlan_table.goto(self._find_forwarding_table(vlan))) return self.vlan_table.flowmod( self.vlan_table.match(in_port=port.number, vlan=match_vlan), priority=self.low_priority, inst=inst)
def del_port(self, port): ofmsgs = [] if port.vlans(): ofmsgs.extend(self._del_host_flows(port)) native_vlan = self._native_vlan(port) if native_vlan is not None or port.count_untag_vlan_miss: ofmsgs.append(self.vlan_table.flowdel( self.vlan_table.match(in_port=port.number, vlan=NullVLAN()), priority=self.low_priority)) for vlan in port.tagged_vlans: ofmsgs.append(self.vlan_table.flowdel( self.vlan_table.match(in_port=port.number, vlan=vlan), priority=self.low_priority)) if port.lacp: ofmsgs.append(self.vlan_table.flowdel( self._lacp_match(port), priority=self.dp_highest_priority)) return ofmsgs
def add_port(self, port): if port.vlans(): mirror_act = port.mirror_actions() tagged_ofmsgs = [] for vlan in port.tagged_vlans: tagged_ofmsgs.append(self._port_add_vlan_rules( port, vlan, mirror_act, push_vlan=False)) untagged_ofmsgs = [] native_vlan = self._native_vlan(port) if native_vlan is not None: untagged_ofmsgs.append(self._port_add_vlan_rules( port, native_vlan, mirror_act)) # If no untagged VLANs, add explicit drop rule for untagged packets. if port.count_untag_vlan_miss and not untagged_ofmsgs: untagged_ofmsgs.append(self.vlan_table.flowmod( self.vlan_table.match(in_port=port.number, vlan=NullVLAN()), priority=self.low_priority)) return tagged_ofmsgs + untagged_ofmsgs return []
def add_port(self, port): ofmsgs = [] if port.vlans(): mirror_act = port.mirror_actions() for vlan in port.tagged_vlans: ofmsgs.append(self._port_add_vlan_rules( port, vlan, mirror_act, push_vlan=False)) native_vlan = self._native_vlan(port) if native_vlan is not None: ofmsgs.append(self._port_add_vlan_rules( port, native_vlan, mirror_act)) # If no untagged VLANs, add explicit drop rule for untagged packets. elif port.count_untag_vlan_miss: ofmsgs.append(self.vlan_table.flowdrop( self.vlan_table.match(in_port=port.number, vlan=NullVLAN()), priority=self.low_priority)) if port.lacp: ofmsgs.append(self.vlan_table.flowcontroller( self._lacp_match(port), priority=self.dp_highest_priority, max_len=valve_packet.LACP_SIZE)) ofmsgs.extend(self.lacp_advertise(port)) return ofmsgs