Add an API call to set interface MAC addresses.
Change-Id: I316862e1d33e5d10c058317cc4827304e55ceba4 Signed-off-by: Jon Loeliger <jdl@netgate.com>
This commit is contained in:

committed by
Damjan Marion

parent
fa5d198297
commit
10c273bc24
@ -346,9 +346,33 @@ define sw_interface_tag_add_del_reply
|
||||
u32 context;
|
||||
i32 retval;
|
||||
};
|
||||
|
||||
/** \brief Set an interface's MAC address
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
@param sw_if_index - the interface whose MAC will be set
|
||||
@param mac_addr - the new MAC address
|
||||
*/
|
||||
define sw_interface_set_mac_address
|
||||
{
|
||||
u32 client_index;
|
||||
u32 context;
|
||||
u32 sw_if_index;
|
||||
u8 mac_address[6];
|
||||
};
|
||||
|
||||
/** \brief Reply to setting an interface MAC address request
|
||||
@param context - sender context which was passed in the request
|
||||
@param retval - return code for the request
|
||||
*/
|
||||
define sw_interface_set_mac_address_reply
|
||||
{
|
||||
u32 context;
|
||||
i32 retval;
|
||||
};
|
||||
|
||||
/*
|
||||
* Local Variables:
|
||||
* eval: (c-set-style "gnu")
|
||||
* End:
|
||||
*/
|
||||
|
||||
|
@ -58,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)
|
||||
@ -726,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.
|
||||
|
Reference in New Issue
Block a user