Example #1
0
        def leaf_device_default_rules(device):
            ports = self.root_proxy.get('/devices/{}/ports'.format(device.id))
            upstream_ports = [
                port for port in ports if port.type == Port.PON_ONU \
                                            or port.type == Port.VENET_ONU
            ]
            assert len(upstream_ports) == 1
            downstream_ports = [
                port for port in ports if port.type == Port.ETHERNET_UNI
            ]

            # it is possible that the downstream ports are not
            # created, but the flow_decomposition has already
            # kicked in. In such scenarios, cut short the processing
            # and return.
            if len(downstream_ports) == 0:
                return None, None
            # assert len(downstream_ports) == 1
            upstream_port  = upstream_ports[0]
            flows = OrderedDict()
            for downstream_port in downstream_ports:
                flows.update(OrderedDict((f.id, f) for f in [
                    mk_flow_stat(
                        priority=500,
                        match_fields=[
                            in_port(downstream_port.port_no),
                            vlan_vid(ofp.OFPVID_PRESENT | 0)
                        ],
                        actions=[
                            set_field(vlan_vid(ofp.OFPVID_PRESENT | device.vlan)),
                            output(upstream_port.port_no)
                        ]
                    ),
                    mk_flow_stat(
                        priority=500,
                        match_fields=[
                            in_port(downstream_port.port_no),
                            vlan_vid(0)
                        ],
                        actions=[
                            push_vlan(0x8100),
                            set_field(vlan_vid(ofp.OFPVID_PRESENT | device.vlan)),
                            output(upstream_port.port_no)
                        ]
                    ),
                    mk_flow_stat(
                        priority=500,
                        match_fields=[
                            in_port(upstream_port.port_no),
                            vlan_vid(ofp.OFPVID_PRESENT | device.vlan)
                        ],
                        actions=[
                            set_field(vlan_vid(ofp.OFPVID_PRESENT | 0)),
                            output(downstream_port.port_no)
                        ]
                    ),
                ]))
            groups = OrderedDict()
            return flows, groups
Example #2
0
 def leaf_device_default_rules(device):
     ports = self.root_proxy.get('/devices/{}/ports'.format(device.id))
     upstream_ports = [
         port for port in ports if port.type == Port.PON_ONU \
                                     or port.type == Port.VENET_ONU
     ]
     assert len(upstream_ports) == 1
     downstream_ports = [
         port for port in ports if port.type == Port.ETHERNET_UNI
     ]
     # assert len(downstream_ports) == 1
     flows = OrderedDict((f.id, f) for f in [
         mk_flow_stat(
             priority=500,
             match_fields=[
                 in_port(downstream_ports[0].port_no),
                 vlan_vid(ofp.OFPVID_PRESENT | 0)
             ],
             actions=[
                 set_field(vlan_vid(ofp.OFPVID_PRESENT | device.vlan)),
                 output(upstream_ports[0].port_no)
             ]
         ),
         mk_flow_stat(
             priority=500,
             match_fields=[
                 in_port(downstream_ports[0].port_no),
                 vlan_vid(0)
             ],
             actions=[
                 push_vlan(0x8100),
                 set_field(vlan_vid(ofp.OFPVID_PRESENT | device.vlan)),
                 output(upstream_ports[0].port_no)
             ]
         ),
         mk_flow_stat(
             priority=500,
             match_fields=[
                 in_port(upstream_ports[0].port_no),
                 vlan_vid(ofp.OFPVID_PRESENT | device.vlan)
             ],
             actions=[
                 set_field(vlan_vid(ofp.OFPVID_PRESENT | 0)),
                 output(downstream_ports[0].port_no)
             ]
         ),
     ])
     groups = OrderedDict()
     return flows, groups
 def leaf_device_default_rules(device):
     ports = self.root_proxy.get('/devices/{}/ports'.format(device.id))
     upstream_ports = [
         port for port in ports if port.type == Port.PON_ONU \
                                     or port.type == Port.VENET_ONU
     ]
     assert len(upstream_ports) == 1
     downstream_ports = [
         port for port in ports if port.type == Port.ETHERNET_UNI
     ]
     # assert len(downstream_ports) == 1
     flows = OrderedDict((f.id, f) for f in [
         mk_flow_stat(
             priority=500,
             match_fields=[
                 in_port(downstream_ports[0].port_no),
                 vlan_vid(ofp.OFPVID_PRESENT | 0)
             ],
             actions=[
                 set_field(vlan_vid(ofp.OFPVID_PRESENT | device.vlan)),
                 output(upstream_ports[0].port_no)
             ]
         ),
         mk_flow_stat(
             priority=500,
             match_fields=[
                 in_port(downstream_ports[0].port_no),
                 vlan_vid(0)
             ],
             actions=[
                 push_vlan(0x8100),
                 set_field(vlan_vid(ofp.OFPVID_PRESENT | device.vlan)),
                 output(upstream_ports[0].port_no)
             ]
         ),
         mk_flow_stat(
             priority=500,
             match_fields=[
                 in_port(upstream_ports[0].port_no),
                 vlan_vid(ofp.OFPVID_PRESENT | device.vlan)
             ],
             actions=[
                 set_field(vlan_vid(ofp.OFPVID_PRESENT | 0)),
                 output(downstream_ports[0].port_no)
             ]
         ),
     ])
     groups = OrderedDict()
     return flows, groups