Lines Matching refs:hard_iface
51 struct batadv_hard_iface *hard_iface; in batadv_hardif_release() local
53 hard_iface = container_of(ref, struct batadv_hard_iface, refcount); in batadv_hardif_release()
54 dev_put(hard_iface->net_dev); in batadv_hardif_release()
56 kfree_rcu(hard_iface, rcu); in batadv_hardif_release()
68 struct batadv_hard_iface *hard_iface; in batadv_hardif_get_by_netdev() local
71 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_hardif_get_by_netdev()
72 if (hard_iface->net_dev == net_dev && in batadv_hardif_get_by_netdev()
73 kref_get_unless_zero(&hard_iface->refcount)) in batadv_hardif_get_by_netdev()
77 hard_iface = NULL; in batadv_hardif_get_by_netdev()
81 return hard_iface; in batadv_hardif_get_by_netdev()
215 struct batadv_hard_iface *hard_iface = NULL; in batadv_get_real_netdevice() local
231 hard_iface = batadv_hardif_get_by_netdev(netdev); in batadv_get_real_netdevice()
232 if (!hard_iface || !hard_iface->soft_iface) in batadv_get_real_netdevice()
235 net = dev_net(hard_iface->soft_iface); in batadv_get_real_netdevice()
241 if (hard_iface) in batadv_get_real_netdevice()
242 batadv_hardif_put(hard_iface); in batadv_get_real_netdevice()
352 bool batadv_is_cfg80211_hardif(struct batadv_hard_iface *hard_iface) in batadv_is_cfg80211_hardif() argument
359 return !!(hard_iface->wifi_flags & allowed_flags); in batadv_is_cfg80211_hardif()
368 bool batadv_is_wifi_hardif(struct batadv_hard_iface *hard_iface) in batadv_is_wifi_hardif() argument
370 if (!hard_iface) in batadv_is_wifi_hardif()
373 return hard_iface->wifi_flags != 0; in batadv_is_wifi_hardif()
431 struct batadv_hard_iface *hard_iface; in batadv_hardif_get_active() local
434 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_hardif_get_active()
435 if (hard_iface->soft_iface != soft_iface) in batadv_hardif_get_active()
438 if (hard_iface->if_status == BATADV_IF_ACTIVE && in batadv_hardif_get_active()
439 kref_get_unless_zero(&hard_iface->refcount)) in batadv_hardif_get_active()
443 hard_iface = NULL; in batadv_hardif_get_active()
447 return hard_iface; in batadv_hardif_get_active()
491 batadv_hardif_is_iface_up(const struct batadv_hard_iface *hard_iface) in batadv_hardif_is_iface_up() argument
493 if (hard_iface->net_dev->flags & IFF_UP) in batadv_hardif_is_iface_up()
501 const struct batadv_hard_iface *hard_iface; in batadv_check_known_mac_addr() local
504 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_check_known_mac_addr()
505 if (hard_iface->if_status != BATADV_IF_ACTIVE && in batadv_check_known_mac_addr()
506 hard_iface->if_status != BATADV_IF_TO_BE_ACTIVATED) in batadv_check_known_mac_addr()
509 if (hard_iface->net_dev == net_dev) in batadv_check_known_mac_addr()
512 if (!batadv_compare_eth(hard_iface->net_dev->dev_addr, in batadv_check_known_mac_addr()
517 net_dev->dev_addr, hard_iface->net_dev->name); in batadv_check_known_mac_addr()
529 const struct batadv_hard_iface *hard_iface; in batadv_hardif_recalc_extra_skbroom() local
536 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_hardif_recalc_extra_skbroom()
537 if (hard_iface->if_status == BATADV_IF_NOT_IN_USE) in batadv_hardif_recalc_extra_skbroom()
540 if (hard_iface->soft_iface != soft_iface) in batadv_hardif_recalc_extra_skbroom()
544 hard_iface->net_dev->hard_header_len); in batadv_hardif_recalc_extra_skbroom()
547 hard_iface->net_dev->needed_headroom); in batadv_hardif_recalc_extra_skbroom()
550 hard_iface->net_dev->needed_tailroom); in batadv_hardif_recalc_extra_skbroom()
571 const struct batadv_hard_iface *hard_iface; in batadv_hardif_min_mtu() local
575 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_hardif_min_mtu()
576 if (hard_iface->if_status != BATADV_IF_ACTIVE && in batadv_hardif_min_mtu()
577 hard_iface->if_status != BATADV_IF_TO_BE_ACTIVATED) in batadv_hardif_min_mtu()
580 if (hard_iface->soft_iface != soft_iface) in batadv_hardif_min_mtu()
583 min_mtu = min_t(int, hard_iface->net_dev->mtu, min_mtu); in batadv_hardif_min_mtu()
630 batadv_hardif_activate_interface(struct batadv_hard_iface *hard_iface) in batadv_hardif_activate_interface() argument
635 if (hard_iface->if_status != BATADV_IF_INACTIVE) in batadv_hardif_activate_interface()
638 bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_hardif_activate_interface()
640 bat_priv->algo_ops->iface.update_mac(hard_iface); in batadv_hardif_activate_interface()
641 hard_iface->if_status = BATADV_IF_TO_BE_ACTIVATED; in batadv_hardif_activate_interface()
648 batadv_primary_if_select(bat_priv, hard_iface); in batadv_hardif_activate_interface()
650 batadv_info(hard_iface->soft_iface, "Interface activated: %s\n", in batadv_hardif_activate_interface()
651 hard_iface->net_dev->name); in batadv_hardif_activate_interface()
653 batadv_update_min_mtu(hard_iface->soft_iface); in batadv_hardif_activate_interface()
656 bat_priv->algo_ops->iface.activate(hard_iface); in batadv_hardif_activate_interface()
664 batadv_hardif_deactivate_interface(struct batadv_hard_iface *hard_iface) in batadv_hardif_deactivate_interface() argument
666 if (hard_iface->if_status != BATADV_IF_ACTIVE && in batadv_hardif_deactivate_interface()
667 hard_iface->if_status != BATADV_IF_TO_BE_ACTIVATED) in batadv_hardif_deactivate_interface()
670 hard_iface->if_status = BATADV_IF_INACTIVE; in batadv_hardif_deactivate_interface()
672 batadv_info(hard_iface->soft_iface, "Interface deactivated: %s\n", in batadv_hardif_deactivate_interface()
673 hard_iface->net_dev->name); in batadv_hardif_deactivate_interface()
675 batadv_update_min_mtu(hard_iface->soft_iface); in batadv_hardif_deactivate_interface()
711 int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, in batadv_hardif_enable_interface() argument
720 if (hard_iface->if_status != BATADV_IF_NOT_IN_USE) in batadv_hardif_enable_interface()
723 kref_get(&hard_iface->refcount); in batadv_hardif_enable_interface()
749 master = netdev_master_upper_dev_get(hard_iface->net_dev); in batadv_hardif_enable_interface()
750 ret = batadv_master_del_slave(hard_iface, master); in batadv_hardif_enable_interface()
754 hard_iface->soft_iface = soft_iface; in batadv_hardif_enable_interface()
755 bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_hardif_enable_interface()
757 ret = netdev_master_upper_dev_link(hard_iface->net_dev, in batadv_hardif_enable_interface()
762 ret = bat_priv->algo_ops->iface.enable(hard_iface); in batadv_hardif_enable_interface()
766 hard_iface->if_status = BATADV_IF_INACTIVE; in batadv_hardif_enable_interface()
768 kref_get(&hard_iface->refcount); in batadv_hardif_enable_interface()
769 hard_iface->batman_adv_ptype.type = ethertype; in batadv_hardif_enable_interface()
770 hard_iface->batman_adv_ptype.func = batadv_batman_skb_recv; in batadv_hardif_enable_interface()
771 hard_iface->batman_adv_ptype.dev = hard_iface->net_dev; in batadv_hardif_enable_interface()
772 dev_add_pack(&hard_iface->batman_adv_ptype); in batadv_hardif_enable_interface()
774 batadv_info(hard_iface->soft_iface, "Adding interface: %s\n", in batadv_hardif_enable_interface()
775 hard_iface->net_dev->name); in batadv_hardif_enable_interface()
778 hard_iface->net_dev->mtu < ETH_DATA_LEN + max_header_len) in batadv_hardif_enable_interface()
779 batadv_info(hard_iface->soft_iface, in batadv_hardif_enable_interface()
781 hard_iface->net_dev->name, hard_iface->net_dev->mtu, in batadv_hardif_enable_interface()
785 hard_iface->net_dev->mtu < ETH_DATA_LEN + max_header_len) in batadv_hardif_enable_interface()
786 batadv_info(hard_iface->soft_iface, in batadv_hardif_enable_interface()
788 hard_iface->net_dev->name, hard_iface->net_dev->mtu, in batadv_hardif_enable_interface()
791 if (batadv_hardif_is_iface_up(hard_iface)) in batadv_hardif_enable_interface()
792 batadv_hardif_activate_interface(hard_iface); in batadv_hardif_enable_interface()
794 batadv_err(hard_iface->soft_iface, in batadv_hardif_enable_interface()
796 hard_iface->net_dev->name); in batadv_hardif_enable_interface()
801 bat_priv->algo_ops->iface.enabled(hard_iface); in batadv_hardif_enable_interface()
807 netdev_upper_dev_unlink(hard_iface->net_dev, soft_iface); in batadv_hardif_enable_interface()
809 hard_iface->soft_iface = NULL; in batadv_hardif_enable_interface()
812 batadv_hardif_put(hard_iface); in batadv_hardif_enable_interface()
828 struct batadv_hard_iface *hard_iface; in batadv_hardif_cnt() local
832 list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { in batadv_hardif_cnt()
833 if (hard_iface->soft_iface != soft_iface) in batadv_hardif_cnt()
849 void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface, in batadv_hardif_disable_interface() argument
852 struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_hardif_disable_interface()
855 batadv_hardif_deactivate_interface(hard_iface); in batadv_hardif_disable_interface()
857 if (hard_iface->if_status != BATADV_IF_INACTIVE) in batadv_hardif_disable_interface()
860 batadv_info(hard_iface->soft_iface, "Removing interface: %s\n", in batadv_hardif_disable_interface()
861 hard_iface->net_dev->name); in batadv_hardif_disable_interface()
862 dev_remove_pack(&hard_iface->batman_adv_ptype); in batadv_hardif_disable_interface()
863 batadv_hardif_put(hard_iface); in batadv_hardif_disable_interface()
866 if (hard_iface == primary_if) { in batadv_hardif_disable_interface()
869 new_if = batadv_hardif_get_active(hard_iface->soft_iface); in batadv_hardif_disable_interface()
876 bat_priv->algo_ops->iface.disable(hard_iface); in batadv_hardif_disable_interface()
877 hard_iface->if_status = BATADV_IF_NOT_IN_USE; in batadv_hardif_disable_interface()
881 batadv_purge_outstanding_packets(bat_priv, hard_iface); in batadv_hardif_disable_interface()
882 dev_put(hard_iface->soft_iface); in batadv_hardif_disable_interface()
884 netdev_upper_dev_unlink(hard_iface->net_dev, hard_iface->soft_iface); in batadv_hardif_disable_interface()
885 batadv_hardif_recalc_extra_skbroom(hard_iface->soft_iface); in batadv_hardif_disable_interface()
888 if (batadv_hardif_cnt(hard_iface->soft_iface) <= 1) { in batadv_hardif_disable_interface()
892 batadv_softif_destroy_sysfs(hard_iface->soft_iface); in batadv_hardif_disable_interface()
895 hard_iface->soft_iface = NULL; in batadv_hardif_disable_interface()
896 batadv_hardif_put(hard_iface); in batadv_hardif_disable_interface()
906 struct batadv_hard_iface *hard_iface; in batadv_hardif_add_interface() local
916 hard_iface = kzalloc(sizeof(*hard_iface), GFP_ATOMIC); in batadv_hardif_add_interface()
917 if (!hard_iface) in batadv_hardif_add_interface()
920 ret = batadv_sysfs_add_hardif(&hard_iface->hardif_obj, net_dev); in batadv_hardif_add_interface()
924 hard_iface->net_dev = net_dev; in batadv_hardif_add_interface()
925 hard_iface->soft_iface = NULL; in batadv_hardif_add_interface()
926 hard_iface->if_status = BATADV_IF_NOT_IN_USE; in batadv_hardif_add_interface()
928 batadv_debugfs_add_hardif(hard_iface); in batadv_hardif_add_interface()
930 INIT_LIST_HEAD(&hard_iface->list); in batadv_hardif_add_interface()
931 INIT_HLIST_HEAD(&hard_iface->neigh_list); in batadv_hardif_add_interface()
933 mutex_init(&hard_iface->bat_iv.ogm_buff_mutex); in batadv_hardif_add_interface()
934 spin_lock_init(&hard_iface->neigh_list_lock); in batadv_hardif_add_interface()
935 kref_init(&hard_iface->refcount); in batadv_hardif_add_interface()
937 hard_iface->num_bcasts = BATADV_NUM_BCASTS_DEFAULT; in batadv_hardif_add_interface()
938 hard_iface->wifi_flags = batadv_wifi_flags_evaluate(net_dev); in batadv_hardif_add_interface()
939 if (batadv_is_wifi_hardif(hard_iface)) in batadv_hardif_add_interface()
940 hard_iface->num_bcasts = BATADV_NUM_BCASTS_WIRELESS; in batadv_hardif_add_interface()
942 batadv_v_hardif_init(hard_iface); in batadv_hardif_add_interface()
944 batadv_check_known_mac_addr(hard_iface->net_dev); in batadv_hardif_add_interface()
945 kref_get(&hard_iface->refcount); in batadv_hardif_add_interface()
946 list_add_tail_rcu(&hard_iface->list, &batadv_hardif_list); in batadv_hardif_add_interface()
949 return hard_iface; in batadv_hardif_add_interface()
952 kfree(hard_iface); in batadv_hardif_add_interface()
959 static void batadv_hardif_remove_interface(struct batadv_hard_iface *hard_iface) in batadv_hardif_remove_interface() argument
964 if (hard_iface->if_status != BATADV_IF_NOT_IN_USE) in batadv_hardif_remove_interface()
965 batadv_hardif_disable_interface(hard_iface, in batadv_hardif_remove_interface()
968 if (hard_iface->if_status != BATADV_IF_NOT_IN_USE) in batadv_hardif_remove_interface()
971 hard_iface->if_status = BATADV_IF_TO_BE_REMOVED; in batadv_hardif_remove_interface()
972 batadv_debugfs_del_hardif(hard_iface); in batadv_hardif_remove_interface()
973 batadv_sysfs_del_hardif(&hard_iface->hardif_obj); in batadv_hardif_remove_interface()
974 batadv_hardif_put(hard_iface); in batadv_hardif_remove_interface()
982 struct batadv_hard_iface *hard_iface, *hard_iface_tmp; in batadv_hardif_remove_interfaces() local
985 list_for_each_entry_safe(hard_iface, hard_iface_tmp, in batadv_hardif_remove_interfaces()
987 list_del_rcu(&hard_iface->list); in batadv_hardif_remove_interfaces()
989 batadv_hardif_remove_interface(hard_iface); in batadv_hardif_remove_interfaces()
1024 struct batadv_hard_iface *hard_iface; in batadv_hard_if_event() local
1031 hard_iface = batadv_hardif_get_by_netdev(net_dev); in batadv_hard_if_event()
1032 if (!hard_iface && (event == NETDEV_REGISTER || in batadv_hard_if_event()
1034 hard_iface = batadv_hardif_add_interface(net_dev); in batadv_hard_if_event()
1036 if (!hard_iface) in batadv_hard_if_event()
1041 batadv_hardif_activate_interface(hard_iface); in batadv_hard_if_event()
1045 batadv_hardif_deactivate_interface(hard_iface); in batadv_hard_if_event()
1049 list_del_rcu(&hard_iface->list); in batadv_hard_if_event()
1052 batadv_hardif_remove_interface(hard_iface); in batadv_hard_if_event()
1055 if (hard_iface->soft_iface) in batadv_hard_if_event()
1056 batadv_update_min_mtu(hard_iface->soft_iface); in batadv_hard_if_event()
1059 if (hard_iface->if_status == BATADV_IF_NOT_IN_USE) in batadv_hard_if_event()
1062 batadv_check_known_mac_addr(hard_iface->net_dev); in batadv_hard_if_event()
1064 bat_priv = netdev_priv(hard_iface->soft_iface); in batadv_hard_if_event()
1065 bat_priv->algo_ops->iface.update_mac(hard_iface); in batadv_hard_if_event()
1071 if (hard_iface == primary_if) in batadv_hard_if_event()
1075 hard_iface->wifi_flags = batadv_wifi_flags_evaluate(net_dev); in batadv_hard_if_event()
1076 if (batadv_is_wifi_hardif(hard_iface)) in batadv_hard_if_event()
1077 hard_iface->num_bcasts = BATADV_NUM_BCASTS_WIRELESS; in batadv_hard_if_event()
1080 batadv_debugfs_rename_hardif(hard_iface); in batadv_hard_if_event()
1087 batadv_hardif_put(hard_iface); in batadv_hard_if_event()