Lines Matching refs:ifa
78 static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa);
82 static void dn_send_brd_hello(struct net_device *dev, struct dn_ifaddr *ifa);
83 static void dn_send_ptp_hello(struct net_device *dev, struct dn_ifaddr *ifa);
317 struct dn_ifaddr *ifa; in dn_dev_alloc_ifa() local
319 ifa = kzalloc(sizeof(*ifa), GFP_KERNEL); in dn_dev_alloc_ifa()
321 return ifa; in dn_dev_alloc_ifa()
324 static void dn_dev_free_ifa(struct dn_ifaddr *ifa) in dn_dev_free_ifa() argument
326 kfree_rcu(ifa, rcu); in dn_dev_free_ifa()
356 static int dn_dev_insert_ifa(struct dn_dev *dn_db, struct dn_ifaddr *ifa) in dn_dev_insert_ifa() argument
368 if (ifa1->ifa_local == ifa->ifa_local) in dn_dev_insert_ifa()
373 if (ifa->ifa_local != dn_eth2dn(dev->dev_addr)) { in dn_dev_insert_ifa()
374 dn_dn2eth(mac_addr, ifa->ifa_local); in dn_dev_insert_ifa()
379 ifa->ifa_next = dn_db->ifa_list; in dn_dev_insert_ifa()
380 rcu_assign_pointer(dn_db->ifa_list, ifa); in dn_dev_insert_ifa()
382 dn_ifaddr_notify(RTM_NEWADDR, ifa); in dn_dev_insert_ifa()
383 blocking_notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa); in dn_dev_insert_ifa()
388 static int dn_dev_set_ifa(struct net_device *dev, struct dn_ifaddr *ifa) in dn_dev_set_ifa() argument
400 ifa->ifa_dev = dn_db; in dn_dev_set_ifa()
403 ifa->ifa_scope = RT_SCOPE_HOST; in dn_dev_set_ifa()
405 rv = dn_dev_insert_ifa(dn_db, ifa); in dn_dev_set_ifa()
407 dn_dev_free_ifa(ifa); in dn_dev_set_ifa()
419 struct dn_ifaddr *ifa = NULL; in dn_dev_ioctl() local
451 (ifa = rtnl_dereference(*ifap)) != NULL; in dn_dev_ioctl()
452 ifap = &ifa->ifa_next) in dn_dev_ioctl()
453 if (strcmp(ifr->ifr_name, ifa->ifa_label) == 0) in dn_dev_ioctl()
457 if (ifa == NULL && cmd != SIOCSIFADDR) { in dn_dev_ioctl()
464 *((__le16 *)sdn->sdn_nodeaddr) = ifa->ifa_local; in dn_dev_ioctl()
468 if (!ifa) { in dn_dev_ioctl()
469 if ((ifa = dn_dev_alloc_ifa()) == NULL) { in dn_dev_ioctl()
473 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ); in dn_dev_ioctl()
475 if (ifa->ifa_local == dn_saddr2dn(sdn)) in dn_dev_ioctl()
480 ifa->ifa_local = ifa->ifa_address = dn_saddr2dn(sdn); in dn_dev_ioctl()
482 ret = dn_dev_set_ifa(dev, ifa); in dn_dev_ioctl()
574 struct dn_ifaddr *ifa; in dn_nl_deladdr() local
595 (ifa = rtnl_dereference(*ifap)) != NULL; in dn_nl_deladdr()
596 ifap = &ifa->ifa_next) { in dn_nl_deladdr()
598 nla_memcmp(tb[IFA_LOCAL], &ifa->ifa_local, 2)) in dn_nl_deladdr()
601 if (tb[IFA_LABEL] && nla_strcmp(tb[IFA_LABEL], ifa->ifa_label)) in dn_nl_deladdr()
619 struct dn_ifaddr *ifa; in dn_nl_newaddr() local
645 if ((ifa = dn_dev_alloc_ifa()) == NULL) in dn_nl_newaddr()
651 ifa->ifa_local = nla_get_le16(tb[IFA_LOCAL]); in dn_nl_newaddr()
652 ifa->ifa_address = nla_get_le16(tb[IFA_ADDRESS]); in dn_nl_newaddr()
653 ifa->ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : in dn_nl_newaddr()
655 ifa->ifa_scope = ifm->ifa_scope; in dn_nl_newaddr()
656 ifa->ifa_dev = dn_db; in dn_nl_newaddr()
659 nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ); in dn_nl_newaddr()
661 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ); in dn_nl_newaddr()
663 err = dn_dev_insert_ifa(dn_db, ifa); in dn_nl_newaddr()
665 dn_dev_free_ifa(ifa); in dn_nl_newaddr()
679 static int dn_nl_fill_ifaddr(struct sk_buff *skb, struct dn_ifaddr *ifa, in dn_nl_fill_ifaddr() argument
684 u32 ifa_flags = ifa->ifa_flags | IFA_F_PERMANENT; in dn_nl_fill_ifaddr()
694 ifm->ifa_scope = ifa->ifa_scope; in dn_nl_fill_ifaddr()
695 ifm->ifa_index = ifa->ifa_dev->dev->ifindex; in dn_nl_fill_ifaddr()
697 if ((ifa->ifa_address && in dn_nl_fill_ifaddr()
698 nla_put_le16(skb, IFA_ADDRESS, ifa->ifa_address)) || in dn_nl_fill_ifaddr()
699 (ifa->ifa_local && in dn_nl_fill_ifaddr()
700 nla_put_le16(skb, IFA_LOCAL, ifa->ifa_local)) || in dn_nl_fill_ifaddr()
701 (ifa->ifa_label[0] && in dn_nl_fill_ifaddr()
702 nla_put_string(skb, IFA_LABEL, ifa->ifa_label)) || in dn_nl_fill_ifaddr()
713 static void dn_ifaddr_notify(int event, struct dn_ifaddr *ifa) in dn_ifaddr_notify() argument
722 err = dn_nl_fill_ifaddr(skb, ifa, 0, 0, event, 0); in dn_ifaddr_notify()
742 struct dn_ifaddr *ifa; in dn_nl_dump_ifaddr() local
764 for (ifa = rcu_dereference(dn_db->ifa_list), dn_idx = 0; ifa; in dn_nl_dump_ifaddr()
765 ifa = rcu_dereference(ifa->ifa_next), dn_idx++) { in dn_nl_dump_ifaddr()
769 if (dn_nl_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).portid, in dn_nl_dump_ifaddr()
788 struct dn_ifaddr *ifa; in dn_dev_get_first() local
796 ifa = rcu_dereference(dn_db->ifa_list); in dn_dev_get_first()
797 if (ifa != NULL) { in dn_dev_get_first()
798 *addr = ifa->ifa_local; in dn_dev_get_first()
833 static void dn_send_endnode_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_endnode_hello() argument
849 dn_dn2eth(msg->id, ifa->ifa_local); in dn_send_endnode_hello()
877 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
895 if (le16_to_cpu(dn->addr) < le16_to_cpu(ifa->ifa_local)) in dn_am_i_a_router()
901 static void dn_send_router_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_router_hello() argument
934 dn_dn2eth(ptr, ifa->ifa_local); in dn_send_router_hello()
963 if (dn_am_i_a_router(dn, dn_db, ifa)) { in dn_send_router_hello()
973 static void dn_send_brd_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_brd_hello() argument
978 dn_send_endnode_hello(dev, ifa); in dn_send_brd_hello()
980 dn_send_router_hello(dev, ifa); in dn_send_brd_hello()
983 static void dn_send_ptp_hello(struct net_device *dev, struct dn_ifaddr *ifa) in dn_send_ptp_hello() argument
1000 *((__le16 *)ptr) = ifa->ifa_local; in dn_send_ptp_hello()
1007 dn_dn2eth(src, ifa->ifa_local); in dn_send_ptp_hello()
1041 struct dn_ifaddr *ifa; in dn_dev_timer_func() local
1047 for (ifa = rcu_dereference(dn_db->ifa_list); in dn_dev_timer_func()
1048 ifa; in dn_dev_timer_func()
1049 ifa = rcu_dereference(ifa->ifa_next)) { in dn_dev_timer_func()
1050 if (!(ifa->ifa_flags & IFA_F_SECONDARY)) in dn_dev_timer_func()
1051 dn_db->parms.timer3(dev, ifa); in dn_dev_timer_func()
1141 struct dn_ifaddr *ifa; in dn_dev_up() local
1172 if ((ifa = dn_dev_alloc_ifa()) == NULL) in dn_dev_up()
1175 ifa->ifa_local = ifa->ifa_address = addr; in dn_dev_up()
1176 ifa->ifa_flags = 0; in dn_dev_up()
1177 ifa->ifa_scope = RT_SCOPE_UNIVERSE; in dn_dev_up()
1178 strcpy(ifa->ifa_label, dev->name); in dn_dev_up()
1180 dn_dev_set_ifa(dev, ifa); in dn_dev_up()
1224 struct dn_ifaddr *ifa; in dn_dev_down() local
1229 while ((ifa = rtnl_dereference(dn_db->ifa_list)) != NULL) { in dn_dev_down()
1231 dn_dev_free_ifa(ifa); in dn_dev_down()