@ -376,6 +376,27 @@ void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface)
hard_iface - > bat_v . elp_skb = NULL ;
}
/**
* batadv_v_elp_iface_activate - update the ELP buffer belonging to the given
* hard - interface
* @ primary_iface : the new primary interface
* @ hard_iface : interface holding the to - be - updated buffer
*/
void batadv_v_elp_iface_activate ( struct batadv_hard_iface * primary_iface ,
struct batadv_hard_iface * hard_iface )
{
struct batadv_elp_packet * elp_packet ;
struct sk_buff * skb ;
if ( ! hard_iface - > bat_v . elp_skb )
return ;
skb = hard_iface - > bat_v . elp_skb ;
elp_packet = ( struct batadv_elp_packet * ) skb - > data ;
ether_addr_copy ( elp_packet - > orig ,
primary_iface - > net_dev - > dev_addr ) ;
}
/**
* batadv_v_elp_primary_iface_set - change internal data to reflect the new
* primary interface
@ -384,8 +405,6 @@ void batadv_v_elp_iface_disable(struct batadv_hard_iface *hard_iface)
void batadv_v_elp_primary_iface_set ( struct batadv_hard_iface * primary_iface )
{
struct batadv_hard_iface * hard_iface ;
struct batadv_elp_packet * elp_packet ;
struct sk_buff * skb ;
/* update orig field of every elp iface belonging to this mesh */
rcu_read_lock ( ) ;
@ -393,13 +412,7 @@ void batadv_v_elp_primary_iface_set(struct batadv_hard_iface *primary_iface)
if ( primary_iface - > soft_iface ! = hard_iface - > soft_iface )
continue ;
if ( ! hard_iface - > bat_v . elp_skb )
continue ;
skb = hard_iface - > bat_v . elp_skb ;
elp_packet = ( struct batadv_elp_packet * ) skb - > data ;
ether_addr_copy ( elp_packet - > orig ,
primary_iface - > net_dev - > dev_addr ) ;
batadv_v_elp_iface_activate ( primary_iface , hard_iface ) ;
}
rcu_read_unlock ( ) ;
}