• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/net/ipv4/

Lines Matching refs:ifa

121 	struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head);
122 if (ifa->ifa_dev)
123 in_dev_put(ifa->ifa_dev);
124 kfree(ifa);
127 static inline void inet_free_ifa(struct in_ifaddr *ifa)
129 call_rcu(&ifa->rcu_head, inet_rcu_free_ifa);
196 struct in_ifaddr *ifa;
207 while ((ifa = in_dev->ifa_list) != NULL) {
209 inet_free_ifa(ifa);
225 if (inet_ifa_match(a, ifa)) {
226 if (!b || inet_ifa_match(b, ifa)) {
240 struct in_ifaddr *ifa, *ifa1 = *ifap;
254 while ((ifa = *ifap1) != NULL) {
255 if (!(ifa->ifa_flags & IFA_F_SECONDARY) &&
256 ifa1->ifa_scope <= ifa->ifa_scope)
257 last_prim = ifa;
259 if (!(ifa->ifa_flags & IFA_F_SECONDARY) ||
260 ifa1->ifa_mask != ifa->ifa_mask ||
261 !inet_ifa_match(ifa1->ifa_address, ifa)) {
262 ifap1 = &ifa->ifa_next;
263 prev_prom = ifa;
268 *ifap1 = ifa->ifa_next;
270 rtmsg_ifa(RTM_DELADDR, ifa, nlh, pid);
272 NETDEV_DOWN, ifa);
273 inet_free_ifa(ifa);
275 promote = ifa;
310 for (ifa = promote->ifa_next; ifa; ifa = ifa->ifa_next) {
311 if (ifa1->ifa_mask != ifa->ifa_mask ||
312 !inet_ifa_match(ifa1->ifa_address, ifa))
314 fib_add_ifaddr(ifa);
328 static int __inet_insert_ifa(struct in_ifaddr *ifa, struct nlmsghdr *nlh,
331 struct in_device *in_dev = ifa->ifa_dev;
336 if (!ifa->ifa_local) {
337 inet_free_ifa(ifa);
341 ifa->ifa_flags &= ~IFA_F_SECONDARY;
347 ifa->ifa_scope <= ifa1->ifa_scope)
349 if (ifa1->ifa_mask == ifa->ifa_mask &&
350 inet_ifa_match(ifa1->ifa_address, ifa)) {
351 if (ifa1->ifa_local == ifa->ifa_local) {
352 inet_free_ifa(ifa);
355 if (ifa1->ifa_scope != ifa->ifa_scope) {
356 inet_free_ifa(ifa);
359 ifa->ifa_flags |= IFA_F_SECONDARY;
363 if (!(ifa->ifa_flags & IFA_F_SECONDARY)) {
364 net_srandom(ifa->ifa_local);
368 ifa->ifa_next = *ifap;
369 *ifap = ifa;
374 rtmsg_ifa(RTM_NEWADDR, ifa, nlh, pid);
375 blocking_notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa);
380 static int inet_insert_ifa(struct in_ifaddr *ifa)
382 return __inet_insert_ifa(ifa, NULL, 0);
385 static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
392 inet_free_ifa(ifa);
396 if (ifa->ifa_dev != in_dev) {
397 WARN_ON(ifa->ifa_dev);
399 ifa->ifa_dev = in_dev;
401 if (ipv4_is_loopback(ifa->ifa_local))
402 ifa->ifa_scope = RT_SCOPE_HOST;
403 return inet_insert_ifa(ifa);
428 if (ifa->ifa_mask == mask && inet_ifa_match(prefix, ifa))
429 return ifa;
440 struct in_ifaddr *ifa, **ifap;
458 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
459 ifap = &ifa->ifa_next) {
461 ifa->ifa_local != nla_get_be32(tb[IFA_LOCAL]))
464 if (tb[IFA_LABEL] && nla_strcmp(tb[IFA_LABEL], ifa->ifa_label))
468 (ifm->ifa_prefixlen != ifa->ifa_prefixlen ||
469 !inet_ifa_match(nla_get_be32(tb[IFA_ADDRESS]), ifa)))
484 struct in_ifaddr *ifa;
509 ifa = inet_alloc_ifa();
510 if (ifa == NULL)
523 ifa->ifa_prefixlen = ifm->ifa_prefixlen;
524 ifa->ifa_mask = inet_make_mask(ifm->ifa_prefixlen);
525 ifa->ifa_flags = ifm->ifa_flags;
526 ifa->ifa_scope = ifm->ifa_scope;
527 ifa->ifa_dev = in_dev;
529 ifa->ifa_local = nla_get_be32(tb[IFA_LOCAL]);
530 ifa->ifa_address = nla_get_be32(tb[IFA_ADDRESS]);
533 ifa->ifa_broadcast = nla_get_be32(tb[IFA_BROADCAST]);
536 nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
538 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
540 return ifa;
549 struct in_ifaddr *ifa;
553 ifa = rtm_to_ifaddr(net, nlh);
554 if (IS_ERR(ifa))
555 return PTR_ERR(ifa);
557 return __inet_insert_ifa(ifa, nlh, NETLINK_CB(skb).pid);
592 struct in_ifaddr *ifa = NULL;
668 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
669 ifap = &ifa->ifa_next) {
670 if (!strcmp(ifr.ifr_name, ifa->ifa_label) &&
672 ifa->ifa_address) {
680 if (!ifa) {
681 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
682 ifap = &ifa->ifa_next)
683 if (!strcmp(ifr.ifr_name, ifa->ifa_label))
689 if (!ifa && cmd != SIOCSIFADDR && cmd != SIOCSIFFLAGS)
694 sin->sin_addr.s_addr = ifa->ifa_local;
698 sin->sin_addr.s_addr = ifa->ifa_broadcast;
702 sin->sin_addr.s_addr = ifa->ifa_address;
706 sin->sin_addr.s_addr = ifa->ifa_mask;
712 if (!ifa)
727 if (!ifa) {
729 ifa = inet_alloc_ifa();
730 if (!ifa)
733 memcpy(ifa->ifa_label, ifr.ifr_name, IFNAMSIZ);
735 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
738 if (ifa->ifa_local == sin->sin_addr.s_addr)
741 ifa->ifa_broadcast = 0;
742 ifa->ifa_scope = 0;
745 ifa->ifa_address = ifa->ifa_local = sin->sin_addr.s_addr;
748 ifa->ifa_prefixlen = inet_abc_len(ifa->ifa_address);
749 ifa->ifa_mask = inet_make_mask(ifa->ifa_prefixlen);
751 ifa->ifa_prefixlen < 31)
752 ifa->ifa_broadcast = ifa->ifa_address |
753 ~ifa->ifa_mask;
755 ifa->ifa_prefixlen = 32;
756 ifa->ifa_mask = inet_make_mask(32);
758 ret = inet_set_ifa(dev, ifa);
763 if (ifa->ifa_broadcast != sin->sin_addr.s_addr) {
765 ifa->ifa_broadcast = sin->sin_addr.s_addr;
766 inet_insert_ifa(ifa);
772 if (ifa->ifa_address == sin->sin_addr.s_addr)
779 ifa->ifa_address = sin->sin_addr.s_addr;
780 inet_insert_ifa(ifa);
792 if (ifa->ifa_mask != sin->sin_addr.s_addr) {
793 __be32 old_mask = ifa->ifa_mask;
795 ifa->ifa_mask = sin->sin_addr.s_addr;
796 ifa->ifa_prefixlen = inet_mask_len(ifa->ifa_mask);
805 (ifa->ifa_prefixlen < 31) &&
806 (ifa->ifa_broadcast ==
807 (ifa->ifa_local|~old_mask))) {
808 ifa->ifa_broadcast = (ifa->ifa_local |
811 inet_insert_ifa(ifa);
828 struct in_ifaddr *ifa;
835 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
843 if (ifa->ifa_label)
844 strcpy(ifr.ifr_name, ifa->ifa_label);
850 ifa->ifa_local;
876 if (ifa->ifa_scope > scope)
878 if (!dst || inet_ifa_match(dst, ifa)) {
879 addr = ifa->ifa_local;
883 addr = ifa->ifa_local;
900 if (ifa->ifa_scope != RT_SCOPE_LINK &&
901 ifa->ifa_scope <= scope) {
902 addr = ifa->ifa_local;
921 (local == ifa->ifa_local || !local) &&
922 ifa->ifa_scope <= scope) {
923 addr = ifa->ifa_local;
928 same = (!local || inet_ifa_match(local, ifa)) &&
929 (!dst || inet_ifa_match(dst, ifa));
934 if (inet_ifa_match(addr, ifa))
937 if (ifa->ifa_scope <= scope) {
938 addr = ifa->ifa_local;
1003 struct in_ifaddr *ifa;
1006 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
1009 memcpy(old, ifa->ifa_label, IFNAMSIZ);
1010 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1019 strcat(ifa->ifa_label, dot);
1021 strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
1023 rtmsg_ifa(RTM_NEWADDR, ifa, NULL, 0);
1068 struct in_ifaddr *ifa = inet_alloc_ifa();
1070 if (ifa) {
1071 ifa->ifa_local =
1072 ifa->ifa_address = htonl(INADDR_LOOPBACK);
1073 ifa->ifa_prefixlen = 8;
1074 ifa->ifa_mask = inet_make_mask(8);
1076 ifa->ifa_dev = in_dev;
1077 ifa->ifa_scope = RT_SCOPE_HOST;
1078 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1079 inet_insert_ifa(ifa);
1088 struct in_ifaddr *ifa = in_dev->ifa_list;
1090 if (ifa)
1092 ifa->ifa_address, dev,
1093 ifa->ifa_address, NULL,
1140 static int inet_fill_ifaddr(struct sk_buff *skb, struct in_ifaddr *ifa,
1152 ifm->ifa_prefixlen = ifa->ifa_prefixlen;
1153 ifm->ifa_flags = ifa->ifa_flags|IFA_F_PERMANENT;
1154 ifm->ifa_scope = ifa->ifa_scope;
1155 ifm->ifa_index = ifa->ifa_dev->dev->ifindex;
1157 if (ifa->ifa_address)
1158 NLA_PUT_BE32(skb, IFA_ADDRESS, ifa->ifa_address);
1160 if (ifa->ifa_local)
1161 NLA_PUT_BE32(skb, IFA_LOCAL, ifa->ifa_local);
1163 if (ifa->ifa_broadcast)
1164 NLA_PUT_BE32(skb, IFA_BROADCAST, ifa->ifa_broadcast);
1166 if (ifa->ifa_label[0])
1167 NLA_PUT_STRING(skb, IFA_LABEL, ifa->ifa_label);
1184 struct in_ifaddr *ifa;
1205 for (ifa = in_dev->ifa_list, ip_idx = 0; ifa;
1206 ifa = ifa->ifa_next, ip_idx++) {
1209 if (inet_fill_ifaddr(skb, ifa,
1231 static void rtmsg_ifa(int event, struct in_ifaddr *ifa, struct nlmsghdr *nlh,
1239 net = dev_net(ifa->ifa_dev->dev);
1244 err = inet_fill_ifaddr(skb, ifa, pid, seq, event, 0);