Пример #1
0
 def create_router_interface(self,
                             router_interace_id=None,
                             port_id=None,
                             src_mac=None,
                             action=None):
     router_interface_id = router_interace_id or self.DEFAULT_ROUTER_INTERFACE_ID
     port_id = port_id or self.DEFAULT_PORT_ID
     src_mac = src_mac or self.DEFAULT_SRC_MAC
     action = action or self.DEFAULT_ACTION
     attr_list = [(util.prepend_param_field(self.PORT_FIELD), port_id),
                  (util.prepend_param_field(self.SRC_MAC_FIELD), src_mac),
                  (self.ACTION_FIELD, action)]
     router_intf_key = self.generate_app_db_key(router_interface_id)
     self.set_app_db_entry(router_intf_key, attr_list)
     return router_interface_id, router_intf_key, attr_list
Пример #2
0
 def create_next_hop(self,
                     router_interface_id=None,
                     neighbor_id=None,
                     action=None,
                     nexthop_id=None,
                     ipv4=True):
     action = action or self.DEFAULT_ACTION
     router_interface_id = router_interface_id or self.DEFAULT_ROUTER_INTERFACE_ID
     if ipv4 is True:
         neighbor_id = neighbor_id or self.DEFAULT_IPV4_NEIGHBOR_ID
     else:
         neighbor_id = neighbor_id or self.DEFAULT_IPV6_NEIGHBOR_ID
     nexthop_id = nexthop_id or self.DEFAULT_NEXTHOP_ID
     attr_list = [
         (util.prepend_param_field(self.RIF_FIELD), router_interface_id),
         (util.prepend_param_field(self.NEIGHBOR_ID_FIELD), neighbor_id),
         (self.ACTION_FIELD, action)
     ]
     nexthop_key = self.generate_app_db_key(nexthop_id)
     self.set_app_db_entry(nexthop_key, attr_list)
     return nexthop_id, nexthop_key, attr_list
Пример #3
0
 def create_route(self,
                  nexthop_id=None,
                  wcmp_group_id=None,
                  action=None,
                  vrf_id=None,
                  dst=None):
     action = action or self.DEFAULT_ACTION
     vrf_id = vrf_id or self.DEFAULT_VRF_ID
     dst = dst or self.DEFAULT_DST
     if action == "set_wcmp_group_id":
         wcmp_group_id = wcmp_group_id or self.DEFAULT_WCMP_GROUP_ID
         attr_list = [(self.ACTION_FIELD, action),
                      (util.prepend_param_field(self.WCMP_GROUP_ID_FIELD),
                       wcmp_group_id)]
     elif action == "set_nexthop_id":
         nexthop_id = nexthop_id or self.DEFAULT_NEXTHOP_ID
         attr_list = [(self.ACTION_FIELD, action),
                      (util.prepend_param_field(self.NEXTHOP_ID_FIELD),
                       nexthop_id)]
     else:
         attr_list = [(self.ACTION_FIELD, action)]
     route_key = self.generate_app_db_key(vrf_id, dst)
     self.set_app_db_entry(route_key, attr_list)
     return route_key, attr_list
Пример #4
0
 def create_neighbor(self,
                     router_interface_id=None,
                     neighbor_id=None,
                     dst_mac=None,
                     action=None,
                     ipv4=True):
     router_interface_id = router_interface_id or self.DEFAULT_ROUTER_INTERFACE_ID
     neighbor_id = neighbor_id or (self.DEFAULT_IPV4_NEIGHBOR_ID if ipv4
                                   else self.DEFAULT_IPV6_NEIGHBOR_ID)
     dst_mac = dst_mac or self.DEFAULT_DST_MAC
     action = action or self.DEFAULT_ACTION
     attr_list = [(util.prepend_param_field(self.DST_MAC_FIELD), dst_mac),
                  (self.ACTION_FIELD, action)]
     neighbor_key = self.generate_app_db_key(router_interface_id,
                                             neighbor_id)
     self.set_app_db_entry(neighbor_key, attr_list)
     return neighbor_id, neighbor_key, attr_list
Пример #5
0
 def create_wcmp_group(self,
                       nexthop_id=None,
                       wcmp_group_id=None,
                       action=None,
                       weight=None,
                       watch_port=None):
     wcmp_group_id = wcmp_group_id or self.DEFAULT_WCMP_GROUP_ID
     weight = weight or self.DEFAULT_WEIGHT
     action = action or self.DEFAULT_ACTION
     nexthop_id = nexthop_id or self.DEFAULT_NEXTHOP_ID
     watch_port = watch_port or self.DEFAULT_WATCH_PORT
     action1 = {
         util.prepend_param_field(self.NEXTHOP_ID_FIELD): nexthop_id,
         self.WEIGHT_FIELD: weight,
         self.ACTION_FIELD: action,
         self.WATCH_PORT_FIELD: watch_port
     }
     actions = [action1]
     attr_list = [(self.ACTIONS_FIELD, json.dumps(actions))]
     wcmp_group_key = self.generate_app_db_key(wcmp_group_id)
     self.set_app_db_entry(wcmp_group_key, attr_list)
     return wcmp_group_id, wcmp_group_key, attr_list
Пример #6
0
    def test_MirrorSessionAddModifyAndDelete(self, dvs, testlog):
        # Initialize database connectors
        self._set_up(dvs)

        # Maintain list of original Application and ASIC DB entries before adding
        # new mirror session
        original_appl_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.appl_db,
            self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME + ":" +
            self._p4rt_mirror_session_wrapper.TBL_NAME)
        original_appl_state_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.appl_state_db,
            self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME + ":" +
            self._p4rt_mirror_session_wrapper.TBL_NAME)
        original_asic_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.asic_db,
            self._p4rt_mirror_session_wrapper.ASIC_DB_TBL_NAME)

        # 1. Create mirror session
        mirror_session_id = "mirror_session1"
        action = "mirror_as_ipv4_erspan"
        port = "Ethernet8"
        src_ip = "10.206.196.31"
        dst_ip = "172.20.0.203"
        src_mac = "00:02:03:04:05:06"
        dst_mac = "00:1A:11:17:5F:80"
        ttl = "0x40"
        tos = "0x00"

        attr_list_in_app_db = [
            (self._p4rt_mirror_session_wrapper.ACTION, action),
            (util.prepend_param_field(self._p4rt_mirror_session_wrapper.PORT),
             port),
            (util.prepend_param_field(
                self._p4rt_mirror_session_wrapper.SRC_IP), src_ip),
            (util.prepend_param_field(
                self._p4rt_mirror_session_wrapper.DST_IP), dst_ip),
            (util.prepend_param_field(
                self._p4rt_mirror_session_wrapper.SRC_MAC), src_mac),
            (util.prepend_param_field(
                self._p4rt_mirror_session_wrapper.DST_MAC), dst_mac),
            (util.prepend_param_field(self._p4rt_mirror_session_wrapper.TTL),
             ttl),
            (util.prepend_param_field(self._p4rt_mirror_session_wrapper.TOS),
             tos)
        ]
        mirror_session_key = self._p4rt_mirror_session_wrapper.generate_app_db_key(
            mirror_session_id)
        self._p4rt_mirror_session_wrapper.set_app_db_entry(
            mirror_session_key, attr_list_in_app_db)
        util.verify_response(self._response_consumer, mirror_session_key,
                             attr_list_in_app_db, "SWSS_RC_SUCCESS")

        # Query application database for mirror entries
        appl_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.appl_db,
            self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME + ":" +
            self._p4rt_mirror_session_wrapper.TBL_NAME)
        assert len(
            appl_mirror_entries) == len(original_appl_mirror_entries) + 1

        # Query application database for newly created mirror key
        (status,
         fvs) = util.get_key(self._p4rt_mirror_session_wrapper.appl_db,
                             self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME,
                             mirror_session_key)
        assert status == True
        util.verify_attr(fvs, attr_list_in_app_db)

        # Query application state database for mirror entries
        appl_state_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.appl_state_db,
            self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME + ":" +
            self._p4rt_mirror_session_wrapper.TBL_NAME)
        assert len(appl_state_mirror_entries
                   ) == len(original_appl_state_mirror_entries) + 1

        # Query application state database for newly created mirror key
        (status,
         fvs) = util.get_key(self._p4rt_mirror_session_wrapper.appl_state_db,
                             self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME,
                             mirror_session_key)
        assert status == True
        util.verify_attr(fvs, attr_list_in_app_db)

        # Query ASIC database for mirror entries
        asic_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.asic_db,
            self._p4rt_mirror_session_wrapper.ASIC_DB_TBL_NAME)
        assert len(
            asic_mirror_entries) == len(original_asic_mirror_entries) + 1

        # Query ASIC database for newly created mirror key
        asic_db_key = None
        for key in asic_mirror_entries:
            # Get newly created entry
            if key not in original_asic_mirror_entries:
                asic_db_key = key
                break
        assert asic_db_key is not None
        (status, fvs) = util.get_key(
            self._p4rt_mirror_session_wrapper.asic_db,
            self._p4rt_mirror_session_wrapper.ASIC_DB_TBL_NAME, asic_db_key)
        assert status == True

        # Get oid of Ethernet8
        port_oid = util.get_port_oid_by_name(dvs, port)
        assert port_oid != None

        expected_attr_list_in_asic_db = [
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_MONITOR_PORT, port_oid),
            (self._p4rt_mirror_session_wrapper.SAI_MIRROR_SESSION_ATTR_TYPE,
             "SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE"),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_ERSPAN_ENCAPSULATION_TYPE,
             "SAI_ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL"),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_IPHDR_VERSION,
             "4"),  # MIRROR_SESSION_DEFAULT_IP_HDR_VER
            (self._p4rt_mirror_session_wrapper.SAI_MIRROR_SESSION_ATTR_TOS,
             "0"),
            (self._p4rt_mirror_session_wrapper.SAI_MIRROR_SESSION_ATTR_TTL,
             "64"),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_SRC_IP_ADDRESS, src_ip),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_DST_IP_ADDRESS, dst_ip),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_SRC_MAC_ADDRESS, src_mac),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_DST_MAC_ADDRESS, dst_mac),
            (self._p4rt_mirror_session_wrapper.
             SAI_MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE, "35006"
             )  # GRE_PROTOCOL_ERSPAN 0x88be
        ]
        util.verify_attr(fvs, expected_attr_list_in_asic_db)

        # 2. Modify the existing mirror session.
        new_dst_mac = "00:1A:11:17:5F:FF"
        attr_list_in_app_db[5] = (util.prepend_param_field(
            self._p4rt_mirror_session_wrapper.DST_MAC), new_dst_mac)
        self._p4rt_mirror_session_wrapper.set_app_db_entry(
            mirror_session_key, attr_list_in_app_db)
        util.verify_response(self._response_consumer, mirror_session_key,
                             attr_list_in_app_db, "SWSS_RC_SUCCESS")

        # Query application database for the modified mirror key
        (status,
         fvs) = util.get_key(self._p4rt_mirror_session_wrapper.appl_db,
                             self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME,
                             mirror_session_key)
        assert status == True
        util.verify_attr(fvs, attr_list_in_app_db)

        # Query application state database for the modified mirror key
        (status,
         fvs) = util.get_key(self._p4rt_mirror_session_wrapper.appl_state_db,
                             self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME,
                             mirror_session_key)
        assert status == True
        util.verify_attr(fvs, attr_list_in_app_db)

        # Query ASIC DB about the modified mirror session.
        expected_attr_list_in_asic_db[9] = (
            self._p4rt_mirror_session_wrapper.
            SAI_MIRROR_SESSION_ATTR_DST_MAC_ADDRESS, new_dst_mac)
        (status, fvs) = util.get_key(
            self._p4rt_mirror_session_wrapper.asic_db,
            self._p4rt_mirror_session_wrapper.ASIC_DB_TBL_NAME, asic_db_key)
        assert status == True
        util.verify_attr(fvs, expected_attr_list_in_asic_db)

        # 3. Delete the mirror session.
        self._p4rt_mirror_session_wrapper.remove_app_db_entry(
            mirror_session_key)
        util.verify_response(self._response_consumer, mirror_session_key, [],
                             "SWSS_RC_SUCCESS")

        # Query application database for mirror entries
        appl_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.appl_db,
            self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME + ":" +
            self._p4rt_mirror_session_wrapper.TBL_NAME)
        assert len(appl_mirror_entries) == len(original_appl_mirror_entries)

        # Query application database for the deleted mirror key
        (status,
         fvs) = util.get_key(self._p4rt_mirror_session_wrapper.appl_db,
                             self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME,
                             mirror_session_key)
        assert status == False

        # Query application state database for mirror entries
        appl_state_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.appl_state_db,
            self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME + ":" +
            self._p4rt_mirror_session_wrapper.TBL_NAME)
        assert len(appl_state_mirror_entries) == len(
            original_appl_state_mirror_entries)

        # Query application state database for the deleted mirror key
        (status,
         fvs) = util.get_key(self._p4rt_mirror_session_wrapper.appl_state_db,
                             self._p4rt_mirror_session_wrapper.APP_DB_TBL_NAME,
                             mirror_session_key)
        assert status == False

        # Query ASIC database for mirror entries
        asic_mirror_entries = util.get_keys(
            self._p4rt_mirror_session_wrapper.asic_db,
            self._p4rt_mirror_session_wrapper.ASIC_DB_TBL_NAME)
        assert len(asic_mirror_entries) == len(original_asic_mirror_entries)

        # Query ASIC state database for the deleted mirror key
        (status, fvs) = util.get_key(
            self._p4rt_mirror_session_wrapper.asic_db,
            self._p4rt_mirror_session_wrapper.ASIC_DB_TBL_NAME, asic_db_key)
        assert status == False