Lines Matching refs:ifa
512 struct in_ifaddr *ifa; in rtentry_to_fib_config() local
517 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) in rtentry_to_fib_config()
518 if (strcmp(ifa->ifa_label, devname) == 0) in rtentry_to_fib_config()
520 if (!ifa) in rtentry_to_fib_config()
522 cfg->fc_prefsrc = ifa->ifa_local; in rtentry_to_fib_config()
802 static void fib_magic(int cmd, int type, __be32 dst, int dst_len, struct in_ifaddr *ifa) in fib_magic() argument
804 struct net *net = dev_net(ifa->ifa_dev->dev); in fib_magic()
805 u32 tb_id = l3mdev_fib_table(ifa->ifa_dev->dev); in fib_magic()
812 .fc_prefsrc = ifa->ifa_local, in fib_magic()
813 .fc_oif = ifa->ifa_dev->dev->ifindex, in fib_magic()
840 void fib_add_ifaddr(struct in_ifaddr *ifa) in fib_add_ifaddr() argument
842 struct in_device *in_dev = ifa->ifa_dev; in fib_add_ifaddr()
844 struct in_ifaddr *prim = ifa; in fib_add_ifaddr()
845 __be32 mask = ifa->ifa_mask; in fib_add_ifaddr()
846 __be32 addr = ifa->ifa_local; in fib_add_ifaddr()
847 __be32 prefix = ifa->ifa_address & mask; in fib_add_ifaddr()
849 if (ifa->ifa_flags & IFA_F_SECONDARY) { in fib_add_ifaddr()
863 if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF)) in fib_add_ifaddr()
864 fib_magic(RTM_NEWROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim); in fib_add_ifaddr()
866 if (!ipv4_is_zeronet(prefix) && !(ifa->ifa_flags & IFA_F_SECONDARY) && in fib_add_ifaddr()
867 (prefix != addr || ifa->ifa_prefixlen < 32)) { in fib_add_ifaddr()
868 if (!(ifa->ifa_flags & IFA_F_NOPREFIXROUTE)) in fib_add_ifaddr()
871 prefix, ifa->ifa_prefixlen, prim); in fib_add_ifaddr()
874 if (ifa->ifa_prefixlen < 31) { in fib_add_ifaddr()
887 void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim) in fib_del_ifaddr() argument
889 struct in_device *in_dev = ifa->ifa_dev; in fib_del_ifaddr()
892 struct in_ifaddr *prim = ifa, *prim1 = NULL; in fib_del_ifaddr()
893 __be32 brd = ifa->ifa_address | ~ifa->ifa_mask; in fib_del_ifaddr()
894 __be32 any = ifa->ifa_address & ifa->ifa_mask; in fib_del_ifaddr()
904 if (ifa->ifa_flags & IFA_F_SECONDARY) { in fib_del_ifaddr()
905 prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask); in fib_del_ifaddr()
919 (any != ifa->ifa_local || ifa->ifa_prefixlen < 32)) { in fib_del_ifaddr()
920 if (!(ifa->ifa_flags & IFA_F_NOPREFIXROUTE)) in fib_del_ifaddr()
923 any, ifa->ifa_prefixlen, prim); in fib_del_ifaddr()
937 if (ifa1 == ifa) { in fib_del_ifaddr()
980 if (ifa->ifa_local == ifa1->ifa_local) in fib_del_ifaddr()
982 if (ifa->ifa_broadcast == ifa1->ifa_broadcast) in fib_del_ifaddr()
994 if (ifa->ifa_broadcast == brd1 || in fib_del_ifaddr()
995 ifa->ifa_broadcast == any1) in fib_del_ifaddr()
1007 fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim); in fib_del_ifaddr()
1008 if (subnet && ifa->ifa_prefixlen < 31) { in fib_del_ifaddr()
1017 fib_magic(RTM_DELROUTE, RTN_LOCAL, ifa->ifa_local, 32, prim); in fib_del_ifaddr()
1021 ifa->ifa_local); in fib_del_ifaddr()
1029 if (fib_sync_down_addr(dev_net(dev), ifa->ifa_local)) in fib_del_ifaddr()
1132 struct in_ifaddr *ifa = (struct in_ifaddr *)ptr; in fib_inetaddr_event() local
1133 struct net_device *dev = ifa->ifa_dev->dev; in fib_inetaddr_event()
1138 fib_add_ifaddr(ifa); in fib_inetaddr_event()
1146 fib_del_ifaddr(ifa, NULL); in fib_inetaddr_event()
1148 if (!ifa->ifa_dev->ifa_list) { in fib_inetaddr_event()
1182 fib_add_ifaddr(ifa); in fib_netdev_event()