Lines Matching refs:ifa

542 			const struct in_ifaddr *ifa;
552 in_dev_for_each_ifa_rcu(ifa, in_dev) {
553 if (strcmp(ifa->ifa_label, devname) == 0)
558 if (!ifa)
560 cfg->fc_prefsrc = ifa->ifa_local;
1059 struct in_ifaddr *ifa, u32 rt_priority)
1061 struct net *net = dev_net(ifa->ifa_dev->dev);
1062 u32 tb_id = l3mdev_fib_table(ifa->ifa_dev->dev);
1070 .fc_prefsrc = ifa->ifa_local,
1071 .fc_oif = ifa->ifa_dev->dev->ifindex,
1098 void fib_add_ifaddr(struct in_ifaddr *ifa)
1100 struct in_device *in_dev = ifa->ifa_dev;
1102 struct in_ifaddr *prim = ifa;
1103 __be32 mask = ifa->ifa_mask;
1104 __be32 addr = ifa->ifa_local;
1105 __be32 prefix = ifa->ifa_address & mask;
1107 if (ifa->ifa_flags & IFA_F_SECONDARY) {
1121 if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF)) {
1122 fib_magic(RTM_NEWROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32,
1124 arp_invalidate(dev, ifa->ifa_broadcast, false);
1127 if (!ipv4_is_zeronet(prefix) && !(ifa->ifa_flags & IFA_F_SECONDARY) &&
1128 (prefix != addr || ifa->ifa_prefixlen < 32)) {
1129 if (!(ifa->ifa_flags & IFA_F_NOPREFIXROUTE))
1132 prefix, ifa->ifa_prefixlen, prim,
1133 ifa->ifa_rt_priority);
1136 if (ifa->ifa_prefixlen < 31) {
1146 void fib_modify_prefix_metric(struct in_ifaddr *ifa, u32 new_metric)
1148 __be32 prefix = ifa->ifa_address & ifa->ifa_mask;
1149 struct in_device *in_dev = ifa->ifa_dev;
1153 ifa->ifa_flags & (IFA_F_SECONDARY | IFA_F_NOPREFIXROUTE) ||
1155 (prefix == ifa->ifa_local && ifa->ifa_prefixlen == 32))
1161 prefix, ifa->ifa_prefixlen, ifa, new_metric);
1166 prefix, ifa->ifa_prefixlen, ifa, ifa->ifa_rt_priority);
1172 * In this case the secondary ifa can be in device list.
1174 void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
1176 struct in_device *in_dev = ifa->ifa_dev;
1179 struct in_ifaddr *prim = ifa, *prim1 = NULL;
1180 __be32 brd = ifa->ifa_address | ~ifa->ifa_mask;
1181 __be32 any = ifa->ifa_address & ifa->ifa_mask;
1191 if (ifa->ifa_flags & IFA_F_SECONDARY) {
1192 prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
1206 (any != ifa->ifa_local || ifa->ifa_prefixlen < 32)) {
1207 if (!(ifa->ifa_flags & IFA_F_NOPREFIXROUTE))
1210 any, ifa->ifa_prefixlen, prim, 0);
1224 if (ifa1 == ifa) {
1267 if (ifa->ifa_local == ifa1->ifa_local)
1269 if (ifa->ifa_broadcast == ifa1->ifa_broadcast)
1281 if (ifa->ifa_broadcast == brd1 ||
1282 ifa->ifa_broadcast == any1)
1295 fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32,
1297 if (subnet && ifa->ifa_prefixlen < 31) {
1308 fib_magic(RTM_DELROUTE, RTN_LOCAL, ifa->ifa_local, 32, prim, 0);
1312 ifa->ifa_local);
1320 if (fib_sync_down_addr(dev, ifa->ifa_local))
1425 struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
1426 struct net_device *dev = ifa->ifa_dev->dev;
1431 fib_add_ifaddr(ifa);
1439 fib_del_ifaddr(ifa, NULL);
1441 if (!ifa->ifa_dev->ifa_list) {
1461 struct in_ifaddr *ifa;
1476 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1477 fib_add_ifaddr(ifa);