X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_api.c;h=ab0b255ab5afbc07dff1c4df3db7df7cd802ff54;hb=9d6d9894b1035eda6163d96c72b9ddbaea096f0e;hp=39c062714bf2b81fdaa39ff4d557a7ba1dd5622e;hpb=898273fbb588811824bb27ad0ef203d358a7121a;p=vpp.git diff --git a/src/vnet/interface_api.c b/src/vnet/interface_api.c index 39c062714bf..ab0b255ab5a 100644 --- a/src/vnet/interface_api.c +++ b/src/vnet/interface_api.c @@ -46,6 +46,7 @@ #undef vl_printfun #include +vpe_api_main_t vpe_api_main; #define foreach_vpe_api_msg \ _(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags) \ @@ -57,7 +58,8 @@ _(SW_INTERFACE_SET_TABLE, sw_interface_set_table) \ _(SW_INTERFACE_GET_TABLE, sw_interface_get_table) \ _(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered) \ _(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats) \ -_(SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del) +_(SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del) \ +_(SW_INTERFACE_SET_MAC_ADDRESS, sw_interface_set_mac_address) static void vl_api_sw_interface_set_flags_t_handler (vl_api_sw_interface_set_flags_t * mp) @@ -725,6 +727,38 @@ out: REPLY_MACRO (VL_API_SW_INTERFACE_TAG_ADD_DEL_REPLY); } +static void vl_api_sw_interface_set_mac_address_t_handler + (vl_api_sw_interface_set_mac_address_t * mp) +{ + vl_api_sw_interface_set_mac_address_reply_t *rmp; + vnet_main_t *vnm = vnet_get_main (); + u32 sw_if_index = ntohl (mp->sw_if_index); + u64 mac; + clib_error_t *error; + int rv = 0; + + VALIDATE_SW_IF_INDEX (mp); + + mac = ((u64) mp->mac_address[0] << (8 * 0) + | (u64) mp->mac_address[1] << (8 * 1) + | (u64) mp->mac_address[2] << (8 * 2) + | (u64) mp->mac_address[3] << (8 * 3) + | (u64) mp->mac_address[4] << (8 * 4) + | (u64) mp->mac_address[5] << (8 * 5)); + + error = vnet_hw_interface_change_mac_address (vnm, sw_if_index, mac); + if (error) + { + rv = VNET_API_ERROR_UNIMPLEMENTED; + clib_error_report (error); + goto out; + } + + BAD_SW_IF_INDEX_LABEL; +out: + REPLY_MACRO (VL_API_SW_INTERFACE_SET_MAC_ADDRESS_REPLY); +} + /* * vpe_api_hookup * Add vpe's API message handlers to the table.