Lines Matching refs:ifa
79 static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa);
83 static void dn_send_brd_hello(struct net_device *dev, struct dn_ifaddr *ifa);
84 static void dn_send_ptp_hello(struct net_device *dev, struct dn_ifaddr *ifa);
318 struct dn_ifaddr *ifa; in dn_dev_alloc_ifa() local
320 ifa = kzalloc(sizeof(*ifa), GFP_KERNEL); in dn_dev_alloc_ifa()
322 return ifa; in dn_dev_alloc_ifa()
325 static void dn_dev_free_ifa(struct dn_ifaddr *ifa) in dn_dev_free_ifa() argument
327 kfree_rcu(ifa, rcu); in dn_dev_free_ifa()
357 static int dn_dev_insert_ifa(struct dn_dev *dn_db, struct dn_ifaddr *ifa) in dn_dev_insert_ifa() argument
369 if (ifa1->ifa_local == ifa->ifa_local) in dn_dev_insert_ifa()
374 if (ifa->ifa_local != dn_eth2dn(dev->dev_addr)) { in dn_dev_insert_ifa()
375 dn_dn2eth(mac_addr, ifa->ifa_local); in dn_dev_insert_ifa()
380 ifa->ifa_next = dn_db->ifa_list; in dn_dev_insert_ifa()
381 rcu_assign_pointer(dn_db->ifa_list, ifa); in dn_dev_insert_ifa()
383 dn_ifaddr_notify(RTM_NEWADDR, ifa); in dn_dev_insert_ifa()
384 blocking_notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa); in dn_dev_insert_ifa()
389 static int dn_dev_set_ifa(struct net_device *dev, struct dn_ifaddr *ifa) in dn_dev_set_ifa() argument
401 ifa->ifa_dev = dn_db; in dn_dev_set_ifa()
404 ifa->ifa_scope = RT_SCOPE_HOST; in dn_dev_set_ifa()
406 rv = dn_dev_insert_ifa(dn_db, ifa); in dn_dev_set_ifa()
408 dn_dev_free_ifa(ifa); in dn_dev_set_ifa()
420 struct dn_ifaddr *ifa = NULL; in dn_dev_ioctl() local
452 (ifa = rtnl_dereference(*ifap)) != NULL; in dn_dev_ioctl()
453 ifap = &ifa->ifa_next) in dn_dev_ioctl()
454 if (strcmp(ifr->ifr_name, ifa->ifa_label) == 0) in dn_dev_ioctl()
458 if (ifa == NULL && cmd != SIOCSIFADDR) { in dn_dev_ioctl()
465 *((__le16 *)sdn->sdn_nodeaddr) = ifa->ifa_local; in dn_dev_ioctl()
469 if (!ifa) { in dn_dev_ioctl()
470 if ((ifa = dn_dev_alloc_ifa()) == NULL) { in dn_dev_ioctl()
474 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ); in dn_dev_ioctl()
476 if (ifa->ifa_local == dn_saddr2dn(sdn)) in dn_dev_ioctl()
481 ifa->ifa_local = ifa->ifa_address = dn_saddr2dn(sdn); in dn_dev_ioctl()
483 ret = dn_dev_set_ifa(dev, ifa); in dn_dev_ioctl()
576 struct dn_ifaddr *ifa; in dn_nl_deladdr() local
598 (ifa = rtnl_dereference(*ifap)) != NULL; in dn_nl_deladdr()
599 ifap = &ifa->ifa_next) { in dn_nl_deladdr()
601 nla_memcmp(tb[IFA_LOCAL], &ifa->ifa_local, 2)) in dn_nl_deladdr()
604 if (tb[IFA_LABEL] && nla_strcmp(tb[IFA_LABEL], ifa->ifa_label)) in dn_nl_deladdr()
623 struct dn_ifaddr *ifa; in dn_nl_newaddr() local
650 if ((ifa = dn_dev_alloc_ifa()) == NULL) in dn_nl_newaddr()
656 ifa->ifa_local = nla_get_le16(tb[IFA_LOCAL]); in dn_nl_newaddr()
657 ifa->ifa_address = nla_get_le16(tb[IFA_ADDRESS]); in dn_nl_newaddr()
658 ifa->ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : in dn_nl_newaddr()
660 ifa->ifa_scope = ifm->ifa_scope; in dn_nl_newaddr()
661 ifa->ifa_dev = dn_db; in dn_nl_newaddr()
664 nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ); in dn_nl_newaddr()
666 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ); in dn_nl_newaddr()
668 err = dn_dev_insert_ifa(dn_db, ifa); in dn_nl_newaddr()
670 dn_dev_free_ifa(ifa); in dn_nl_newaddr()
684 static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, in dn_nl_fill_ifaddr() argument
689 u32 ifa_flags = ifa->ifa_flags | IFA_F_PERMANENT; in dn_nl_fill_ifaddr()
699 ifm->ifa_scope = ifa->ifa_scope; in dn_nl_fill_ifaddr()
700 ifm->ifa_index = ifa->ifa_dev->dev->ifindex; in dn_nl_fill_ifaddr()
702 if ((ifa->ifa_address && in dn_nl_fill_ifaddr()
703 nla_put_le16(skb, IFA_ADDRESS, ifa->ifa_address)) || in dn_nl_fill_ifaddr()
704 (ifa->ifa_local && in dn_nl_fill_ifaddr()
705 nla_put_le16(skb, IFA_LOCAL, ifa->ifa_local)) || in dn_nl_fill_ifaddr()
706 (ifa->ifa_label[0] && in dn_nl_fill_ifaddr()
707 nla_put_string(skb, IFA_LABEL, ifa->ifa_label)) || in dn_nl_fill_ifaddr()
718 static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa) in dn_ifaddr_notify() argument
727 err = dn_nl_fill_ifaddr(skb, ifa, 0, 0, event, 0); in dn_ifaddr_notify()
747 struct dn_ifaddr *ifa; in dn_nl_dump_ifaddr() local
769 for (ifa = rcu_dereference(dn_db->ifa_list), dn_idx = 0; ifa; in dn_nl_dump_ifaddr()
770 ifa = rcu_dereference(ifa->ifa_next), dn_idx++) { in dn_nl_dump_ifaddr()
774 if (dn_nl_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).portid, in dn_nl_dump_ifaddr()
793 struct dn_ifaddr *ifa; in dn_dev_get_first() local
801 ifa = rcu_dereference(dn_db->ifa_list); in dn_dev_get_first()
802 if (ifa != NULL) { in dn_dev_get_first()
803 *addr = ifa->ifa_local; in dn_dev_get_first()
838 static void dn_send_endnode_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_endnode_hello() argument
854 dn_dn2eth(msg->id, ifa->ifa_local); in dn_send_endnode_hello()
882 static int dn_am_i_a_router(struct dn_neigh *dn, struct dn_dev *dn_db, struct dn_ifaddr *ifa) in dn_am_i_a_router() argument
900 if (le16_to_cpu(dn->addr) < le16_to_cpu(ifa->ifa_local)) in dn_am_i_a_router()
906 static void dn_send_router_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_router_hello() argument
939 dn_dn2eth(ptr, ifa->ifa_local); in dn_send_router_hello()
968 if (dn_am_i_a_router(dn, dn_db, ifa)) { in dn_send_router_hello()
978 static void dn_send_brd_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_brd_hello() argument
983 dn_send_endnode_hello(dev, ifa); in dn_send_brd_hello()
985 dn_send_router_hello(dev, ifa); in dn_send_brd_hello()
988 static void dn_send_ptp_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_ptp_hello() argument
1005 *((__le16 *)ptr) = ifa->ifa_local; in dn_send_ptp_hello()
1012 dn_dn2eth(src, ifa->ifa_local); in dn_send_ptp_hello()
1046 struct dn_ifaddr *ifa; in dn_dev_timer_func() local
1052 for (ifa = rcu_dereference(dn_db->ifa_list); in dn_dev_timer_func()
1053 ifa; in dn_dev_timer_func()
1054 ifa = rcu_dereference(ifa->ifa_next)) { in dn_dev_timer_func()
1055 if (!(ifa->ifa_flags & IFA_F_SECONDARY)) in dn_dev_timer_func()
1056 dn_db->parms.timer3(dev, ifa); in dn_dev_timer_func()
1144 struct dn_ifaddr *ifa; in dn_dev_up() local
1175 if ((ifa = dn_dev_alloc_ifa()) == NULL) in dn_dev_up()
1178 ifa->ifa_local = ifa->ifa_address = addr; in dn_dev_up()
1179 ifa->ifa_flags = 0; in dn_dev_up()
1180 ifa->ifa_scope = RT_SCOPE_UNIVERSE; in dn_dev_up()
1181 strcpy(ifa->ifa_label, dev->name); in dn_dev_up()
1183 dn_dev_set_ifa(dev, ifa); in dn_dev_up()
1227 struct dn_ifaddr *ifa; in dn_dev_down() local
1232 while ((ifa = rtnl_dereference(dn_db->ifa_list)) != NULL) { in dn_dev_down()
1234 dn_dev_free_ifa(ifa); in dn_dev_down()