get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/109641/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 109641,
    "url": "https://patches.dpdk.org/api/patches/109641/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20220413160932.2074781-8-kevinx.liu@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20220413160932.2074781-8-kevinx.liu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220413160932.2074781-8-kevinx.liu@intel.com",
    "date": "2022-04-13T16:09:06",
    "name": "[v2,07/33] net/ice: support dcf MAC configuration",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "84b3cdfb42258be13b54cc496420d7bbc4bda986",
    "submitter": {
        "id": 2440,
        "url": "https://patches.dpdk.org/api/people/2440/?format=api",
        "name": "Kevin Liu",
        "email": "kevinx.liu@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20220413160932.2074781-8-kevinx.liu@intel.com/mbox/",
    "series": [
        {
            "id": 22497,
            "url": "https://patches.dpdk.org/api/series/22497/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=22497",
            "date": "2022-04-13T16:08:59",
            "name": "support full function of DCF",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/22497/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/109641/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/109641/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id F0502A0508;\n\tWed, 13 Apr 2022 10:11:22 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 04E4F42809;\n\tWed, 13 Apr 2022 10:11:02 +0200 (CEST)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n by mails.dpdk.org (Postfix) with ESMTP id 6E3CB4280D\n for <dev@dpdk.org>; Wed, 13 Apr 2022 10:10:59 +0200 (CEST)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Apr 2022 01:10:58 -0700",
            "from intel-cd-odc-kevin.cd.intel.com ([10.240.178.195])\n by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Apr 2022 01:10:56 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1649837459; x=1681373459;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=E+Pxz1IGnkGogeqtg63gIrWEg+zBHJGlVEYLUId0Yg0=;\n b=OV1ApJgwnP/8vmNKpEQhRvEUmdM9W8qrP4r+54cGrqSpgKZoeZXFUEJ7\n Gd3fsEnqyzpQgP8CP1X90GDUYzdnLABk+F0ieyc7NhtJlIBOAWw/ASJxW\n Y0JbM4b08Wx03sW7zKk1b3Me3nwjdyb5wuz5g8I68dKnZbRR3gVsWScva\n wimsB24+LXSGciouGRUlXYwrkemZB6GPQcXzQ4cFTlrHsfXKTsEBVohod\n DMyEBHL0H+iwIKS0l8SqlhIs7vyo62LGJigvoXVvldinHicHyhuJnhcs/\n hqyHVOz4ymeIHDtiVNj82z3v7Ab3flkbGGljUXXUiNKGUE2bXhNq9Vwkf w==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10315\"; a=\"243189082\"",
            "E=Sophos;i=\"5.90,256,1643702400\"; d=\"scan'208\";a=\"243189082\"",
            "E=Sophos;i=\"5.90,256,1643702400\"; d=\"scan'208\";a=\"526847566\""
        ],
        "From": "Kevin Liu <kevinx.liu@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "qiming.yang@intel.com, qi.z.zhang@intel.com, stevex.yang@intel.com,\n Kevin Liu <kevinx.liu@intel.com>, Alvin Zhang <alvinx.zhang@intel.com>",
        "Subject": "[PATCH v2 07/33] net/ice: support dcf MAC configuration",
        "Date": "Wed, 13 Apr 2022 16:09:06 +0000",
        "Message-Id": "<20220413160932.2074781-8-kevinx.liu@intel.com>",
        "X-Mailer": "git-send-email 2.33.1",
        "In-Reply-To": "<20220413160932.2074781-1-kevinx.liu@intel.com>",
        "References": "<20220407105706.18889-1-kevinx.liu@intel.com>\n <20220413160932.2074781-1-kevinx.liu@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Below PMD ops are supported in this patch:\n    .mac_addr_add      = dcf_dev_add_mac_addr\n    .mac_addr_remove   = dcf_dev_del_mac_addr\n    .set_mc_addr_list  = dcf_set_mc_addr_list\n    .mac_addr_set      = dcf_dev_set_default_mac_addr\n\nSigned-off-by: Alvin Zhang <alvinx.zhang@intel.com>\nSigned-off-by: Kevin Liu <kevinx.liu@intel.com>\n---\n drivers/net/ice/ice_dcf.c        |   9 +-\n drivers/net/ice/ice_dcf.h        |   4 +-\n drivers/net/ice/ice_dcf_ethdev.c | 218 ++++++++++++++++++++++++++++++-\n drivers/net/ice/ice_dcf_ethdev.h |   5 +-\n 4 files changed, 226 insertions(+), 10 deletions(-)",
    "diff": "diff --git a/drivers/net/ice/ice_dcf.c b/drivers/net/ice/ice_dcf.c\nindex 89c0203ba3..55ae68c456 100644\n--- a/drivers/net/ice/ice_dcf.c\n+++ b/drivers/net/ice/ice_dcf.c\n@@ -1089,10 +1089,11 @@ ice_dcf_query_stats(struct ice_dcf_hw *hw,\n }\n \n int\n-ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw, bool add)\n+ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw,\n+\t\t\t     struct rte_ether_addr *addr,\n+\t\t\t     bool add, uint8_t type)\n {\n \tstruct virtchnl_ether_addr_list *list;\n-\tstruct rte_ether_addr *addr;\n \tstruct dcf_virtchnl_cmd args;\n \tint len, err = 0;\n \n@@ -1105,7 +1106,6 @@ ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw, bool add)\n \t}\n \n \tlen = sizeof(struct virtchnl_ether_addr_list);\n-\taddr = hw->eth_dev->data->mac_addrs;\n \tlen += sizeof(struct virtchnl_ether_addr);\n \n \tlist = rte_zmalloc(NULL, len, 0);\n@@ -1116,9 +1116,10 @@ ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw, bool add)\n \n \trte_memcpy(list->list[0].addr, addr->addr_bytes,\n \t\t\tsizeof(addr->addr_bytes));\n+\n \tPMD_DRV_LOG(DEBUG, \"add/rm mac:\" RTE_ETHER_ADDR_PRT_FMT,\n \t\t\t    RTE_ETHER_ADDR_BYTES(addr));\n-\n+\tlist->list[0].type = type;\n \tlist->vsi_id = hw->vsi_res->vsi_id;\n \tlist->num_elements = 1;\n \ndiff --git a/drivers/net/ice/ice_dcf.h b/drivers/net/ice/ice_dcf.h\nindex f0b45af5ae..78df202a77 100644\n--- a/drivers/net/ice/ice_dcf.h\n+++ b/drivers/net/ice/ice_dcf.h\n@@ -131,7 +131,9 @@ int ice_dcf_switch_queue(struct ice_dcf_hw *hw, uint16_t qid, bool rx, bool on);\n int ice_dcf_disable_queues(struct ice_dcf_hw *hw);\n int ice_dcf_query_stats(struct ice_dcf_hw *hw,\n \t\t\tstruct virtchnl_eth_stats *pstats);\n-int ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw, bool add);\n+int ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw,\n+\t\t\t\t struct rte_ether_addr *addr, bool add,\n+\t\t\t\t uint8_t type);\n int ice_dcf_link_update(struct rte_eth_dev *dev,\n \t\t    __rte_unused int wait_to_complete);\n void ice_dcf_tm_conf_init(struct rte_eth_dev *dev);\ndiff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c\nindex 87d281ee93..0d944f9fd2 100644\n--- a/drivers/net/ice/ice_dcf_ethdev.c\n+++ b/drivers/net/ice/ice_dcf_ethdev.c\n@@ -26,6 +26,12 @@\n #include \"ice_dcf_ethdev.h\"\n #include \"ice_rxtx.h\"\n \n+#define DCF_NUM_MACADDR_MAX      64\n+\n+static int dcf_add_del_mc_addr_list(struct ice_dcf_hw *hw,\n+\t\t\t\t\t\tstruct rte_ether_addr *mc_addrs,\n+\t\t\t\t\t\tuint32_t mc_addrs_num, bool add);\n+\n static int\n ice_dcf_dev_udp_tunnel_port_add(struct rte_eth_dev *dev,\n \t\t\t\tstruct rte_eth_udp_tunnel *udp_tunnel);\n@@ -561,12 +567,22 @@ ice_dcf_dev_start(struct rte_eth_dev *dev)\n \t\treturn ret;\n \t}\n \n-\tret = ice_dcf_add_del_all_mac_addr(hw, true);\n+\tret = ice_dcf_add_del_all_mac_addr(hw, hw->eth_dev->data->mac_addrs,\n+\t\t\t\t\t   true, VIRTCHNL_ETHER_ADDR_PRIMARY);\n \tif (ret) {\n \t\tPMD_DRV_LOG(ERR, \"Failed to add mac addr\");\n \t\treturn ret;\n \t}\n \n+\tif (dcf_ad->mc_addrs_num) {\n+\t\t/* flush previous addresses */\n+\t\tret = dcf_add_del_mc_addr_list(hw, dcf_ad->mc_addrs,\n+\t\t\t\t\t\tdcf_ad->mc_addrs_num, true);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n+\n+\n \tdev->data->dev_link.link_status = RTE_ETH_LINK_UP;\n \n \treturn 0;\n@@ -625,7 +641,16 @@ ice_dcf_dev_stop(struct rte_eth_dev *dev)\n \trte_intr_efd_disable(intr_handle);\n \trte_intr_vec_list_free(intr_handle);\n \n-\tice_dcf_add_del_all_mac_addr(&dcf_ad->real_hw, false);\n+\tice_dcf_add_del_all_mac_addr(&dcf_ad->real_hw,\n+\t\t\t\t     dcf_ad->real_hw.eth_dev->data->mac_addrs,\n+\t\t\t\t     false, VIRTCHNL_ETHER_ADDR_PRIMARY);\n+\n+\tif (dcf_ad->mc_addrs_num)\n+\t\t/* flush previous addresses */\n+\t\t(void)dcf_add_del_mc_addr_list(&dcf_ad->real_hw,\n+\t\t\t\t\t\t\t\t\t\tdcf_ad->mc_addrs,\n+\t\t\t\t\t\t\tdcf_ad->mc_addrs_num, false);\n+\n \tdev->data->dev_link.link_status = RTE_ETH_LINK_DOWN;\n \tad->pf.adapter_stopped = 1;\n \thw->tm_conf.committed = false;\n@@ -655,7 +680,7 @@ ice_dcf_dev_info_get(struct rte_eth_dev *dev,\n \tstruct ice_dcf_adapter *adapter = dev->data->dev_private;\n \tstruct ice_dcf_hw *hw = &adapter->real_hw;\n \n-\tdev_info->max_mac_addrs = 1;\n+\tdev_info->max_mac_addrs = DCF_NUM_MACADDR_MAX;\n \tdev_info->max_rx_queues = hw->vsi_res->num_queue_pairs;\n \tdev_info->max_tx_queues = hw->vsi_res->num_queue_pairs;\n \tdev_info->min_rx_bufsize = ICE_BUF_SIZE_MIN;\n@@ -818,6 +843,189 @@ ice_dcf_dev_allmulticast_disable(__rte_unused struct rte_eth_dev *dev)\n \t\t\t\t  false);\n }\n \n+static int\n+dcf_dev_add_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *addr,\n+\t\t     __rte_unused uint32_t index,\n+\t\t     __rte_unused uint32_t pool)\n+{\n+\tstruct ice_dcf_adapter *adapter = dev->data->dev_private;\n+\tint err;\n+\n+\tif (rte_is_zero_ether_addr(addr)) {\n+\t\tPMD_DRV_LOG(ERR, \"Invalid Ethernet Address\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\terr = ice_dcf_add_del_all_mac_addr(&adapter->real_hw, addr, true,\n+\t\t\t\t\t   VIRTCHNL_ETHER_ADDR_EXTRA);\n+\tif (err) {\n+\t\tPMD_DRV_LOG(ERR, \"fail to add MAC address\");\n+\t\treturn err;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static void\n+dcf_dev_del_mac_addr(struct rte_eth_dev *dev, uint32_t index)\n+{\n+\tstruct ice_dcf_adapter *adapter = dev->data->dev_private;\n+\tstruct rte_ether_addr *addr = &dev->data->mac_addrs[index];\n+\tint err;\n+\n+\terr = ice_dcf_add_del_all_mac_addr(&adapter->real_hw, addr, false,\n+\t\t\t\t\t   VIRTCHNL_ETHER_ADDR_EXTRA);\n+\tif (err)\n+\t\tPMD_DRV_LOG(ERR, \"fail to remove MAC address\");\n+}\n+\n+static int\n+dcf_add_del_mc_addr_list(struct ice_dcf_hw *hw,\n+\t\t\t struct rte_ether_addr *mc_addrs,\n+\t\t\t uint32_t mc_addrs_num, bool add)\n+{\n+\tstruct virtchnl_ether_addr_list *list;\n+\tstruct dcf_virtchnl_cmd args;\n+\tuint32_t i;\n+\tint len, err = 0;\n+\n+\tlen = sizeof(struct virtchnl_ether_addr_list);\n+\tlen += sizeof(struct virtchnl_ether_addr) * mc_addrs_num;\n+\n+\tlist = rte_zmalloc(NULL, len, 0);\n+\tif (!list) {\n+\t\tPMD_DRV_LOG(ERR, \"fail to allocate memory\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tfor (i = 0; i < mc_addrs_num; i++) {\n+\t\tmemcpy(list->list[i].addr, mc_addrs[i].addr_bytes,\n+\t\t       sizeof(list->list[i].addr));\n+\t\tlist->list[i].type = VIRTCHNL_ETHER_ADDR_EXTRA;\n+\t}\n+\n+\tlist->vsi_id = hw->vsi_res->vsi_id;\n+\tlist->num_elements = mc_addrs_num;\n+\n+\tmemset(&args, 0, sizeof(args));\n+\targs.v_op = add ? VIRTCHNL_OP_ADD_ETH_ADDR :\n+\t\t\tVIRTCHNL_OP_DEL_ETH_ADDR;\n+\targs.req_msg = (uint8_t *)list;\n+\targs.req_msglen  = len;\n+\terr = ice_dcf_execute_virtchnl_cmd(hw, &args);\n+\tif (err)\n+\t\tPMD_DRV_LOG(ERR, \"fail to execute command %s\",\n+\t\t\t    add ? \"OP_ADD_ETHER_ADDRESS\" :\n+\t\t\t    \"OP_DEL_ETHER_ADDRESS\");\n+\trte_free(list);\n+\treturn err;\n+}\n+\n+static int\n+dcf_set_mc_addr_list(struct rte_eth_dev *dev,\n+\t\t     struct rte_ether_addr *mc_addrs,\n+\t\t     uint32_t mc_addrs_num)\n+{\n+\tstruct ice_dcf_adapter *adapter = dev->data->dev_private;\n+\tstruct ice_dcf_hw *hw = &adapter->real_hw;\n+\tuint32_t i;\n+\tint ret;\n+\n+\n+\tif (mc_addrs_num > DCF_NUM_MACADDR_MAX) {\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t    \"can't add more than a limited number (%u) of addresses.\",\n+\t\t\t    (uint32_t)DCF_NUM_MACADDR_MAX);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tfor (i = 0; i < mc_addrs_num; i++) {\n+\t\tif (!rte_is_multicast_ether_addr(&mc_addrs[i])) {\n+\t\t\tconst uint8_t *mac = mc_addrs[i].addr_bytes;\n+\n+\t\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\t    \"Invalid mac: %02x:%02x:%02x:%02x:%02x:%02x\",\n+\t\t\t\t    mac[0], mac[1], mac[2], mac[3], mac[4],\n+\t\t\t\t    mac[5]);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t}\n+\n+\tif (adapter->mc_addrs_num) {\n+\t\t/* flush previous addresses */\n+\t\tret = dcf_add_del_mc_addr_list(hw, adapter->mc_addrs,\n+\t\t\t\t\t\t\tadapter->mc_addrs_num, false);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n+\tif (!mc_addrs_num) {\n+\t\tadapter->mc_addrs_num = 0;\n+\t\treturn 0;\n+\t}\n+\n+    /* add new ones */\n+\tret = dcf_add_del_mc_addr_list(hw, mc_addrs, mc_addrs_num, true);\n+\tif (ret) {\n+\t\t/* if adding mac address list fails, should add the\n+\t\t * previous addresses back.\n+\t\t */\n+\t\tif (adapter->mc_addrs_num)\n+\t\t\t(void)dcf_add_del_mc_addr_list(hw, adapter->mc_addrs,\n+\t\t\t\t\t\t       adapter->mc_addrs_num,\n+\t\t\t\t\t\t       true);\n+\t\treturn ret;\n+\t}\n+\tadapter->mc_addrs_num = mc_addrs_num;\n+\tmemcpy(adapter->mc_addrs,\n+\t\t    mc_addrs, mc_addrs_num * sizeof(*mc_addrs));\n+\n+\treturn 0;\n+}\n+\n+static int\n+dcf_dev_set_default_mac_addr(struct rte_eth_dev *dev,\n+\t\t\t     struct rte_ether_addr *mac_addr)\n+{\n+\tstruct ice_dcf_adapter *adapter = dev->data->dev_private;\n+\tstruct ice_dcf_hw *hw = &adapter->real_hw;\n+\tstruct rte_ether_addr *old_addr;\n+\tint ret;\n+\n+\told_addr = hw->eth_dev->data->mac_addrs;\n+\tif (rte_is_same_ether_addr(old_addr, mac_addr))\n+\t\treturn 0;\n+\n+\tret = ice_dcf_add_del_all_mac_addr(&adapter->real_hw, old_addr, false,\n+\t\t\t\t\t   VIRTCHNL_ETHER_ADDR_PRIMARY);\n+\tif (ret)\n+\t\tPMD_DRV_LOG(ERR, \"Fail to delete old MAC:\"\n+\t\t\t    \" %02X:%02X:%02X:%02X:%02X:%02X\",\n+\t\t\t    old_addr->addr_bytes[0],\n+\t\t\t    old_addr->addr_bytes[1],\n+\t\t\t    old_addr->addr_bytes[2],\n+\t\t\t    old_addr->addr_bytes[3],\n+\t\t\t    old_addr->addr_bytes[4],\n+\t\t\t    old_addr->addr_bytes[5]);\n+\n+\tret = ice_dcf_add_del_all_mac_addr(&adapter->real_hw, mac_addr, true,\n+\t\t\t\t\t   VIRTCHNL_ETHER_ADDR_PRIMARY);\n+\tif (ret)\n+\t\tPMD_DRV_LOG(ERR, \"Fail to add new MAC:\"\n+\t\t\t    \" %02X:%02X:%02X:%02X:%02X:%02X\",\n+\t\t\t    mac_addr->addr_bytes[0],\n+\t\t\t    mac_addr->addr_bytes[1],\n+\t\t\t    mac_addr->addr_bytes[2],\n+\t\t\t    mac_addr->addr_bytes[3],\n+\t\t\t    mac_addr->addr_bytes[4],\n+\t\t\t    mac_addr->addr_bytes[5]);\n+\n+\tif (ret)\n+\t\treturn -EIO;\n+\n+\trte_ether_addr_copy(mac_addr, hw->eth_dev->data->mac_addrs);\n+\treturn 0;\n+}\n+\n static int\n ice_dcf_dev_flow_ops_get(struct rte_eth_dev *dev,\n \t\t\t const struct rte_flow_ops **ops)\n@@ -1326,6 +1534,10 @@ static const struct eth_dev_ops ice_dcf_eth_dev_ops = {\n \t.promiscuous_disable      = ice_dcf_dev_promiscuous_disable,\n \t.allmulticast_enable      = ice_dcf_dev_allmulticast_enable,\n \t.allmulticast_disable     = ice_dcf_dev_allmulticast_disable,\n+\t.mac_addr_add             = dcf_dev_add_mac_addr,\n+\t.mac_addr_remove          = dcf_dev_del_mac_addr,\n+\t.set_mc_addr_list         = dcf_set_mc_addr_list,\n+\t.mac_addr_set             = dcf_dev_set_default_mac_addr,\n \t.flow_ops_get             = ice_dcf_dev_flow_ops_get,\n \t.udp_tunnel_port_add\t  = ice_dcf_dev_udp_tunnel_port_add,\n \t.udp_tunnel_port_del\t  = ice_dcf_dev_udp_tunnel_port_del,\ndiff --git a/drivers/net/ice/ice_dcf_ethdev.h b/drivers/net/ice/ice_dcf_ethdev.h\nindex 22e450527b..27f6402786 100644\n--- a/drivers/net/ice/ice_dcf_ethdev.h\n+++ b/drivers/net/ice/ice_dcf_ethdev.h\n@@ -14,7 +14,7 @@\n #include \"ice_dcf.h\"\n \n #define ICE_DCF_MAX_RINGS  1\n-\n+#define DCF_NUM_MACADDR_MAX\t64\n #define ICE_DCF_FRAME_SIZE_MAX       9728\n #define ICE_DCF_VLAN_TAG_SIZE               4\n #define ICE_DCF_ETH_OVERHEAD \\\n@@ -35,7 +35,8 @@ struct ice_dcf_adapter {\n \n \tbool promisc_unicast_enabled;\n \tbool promisc_multicast_enabled;\n-\n+\tuint32_t mc_addrs_num;\n+\tstruct rte_ether_addr mc_addrs[DCF_NUM_MACADDR_MAX];\n \tint num_reprs;\n \tstruct ice_dcf_repr_info *repr_infos;\n };\n",
    "prefixes": [
        "v2",
        "07/33"
    ]
}