X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fdecnet%2Fdn_dev.c;h=c2a0346f423b4677af1acfa267237c3e313384fc;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=a21a326808b45865c3b368beff027009a005fbfa;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c index a21a32680..c2a0346f4 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c @@ -65,7 +65,7 @@ extern struct neigh_table dn_neigh_table; */ dn_address decnet_address = 0; -static rwlock_t dndev_lock = RW_LOCK_UNLOCKED; +static DEFINE_RWLOCK(dndev_lock); static struct net_device *decnet_default_device; static struct notifier_block *dnaddr_chain; @@ -662,7 +662,7 @@ static int dn_dev_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *a for(ifap = &dn_db->ifa_list; (ifa=*ifap) != NULL; ifap = &ifa->ifa_next) { void *tmp = rta[IFA_LOCAL-1]; if ((tmp && memcmp(RTA_DATA(tmp), &ifa->ifa_local, 2)) || - (rta[IFA_LABEL-1] && strcmp(RTA_DATA(rta[IFA_LABEL-1]), ifa->ifa_label))) + (rta[IFA_LABEL-1] && rtattr_strcmp(rta[IFA_LABEL-1], ifa->ifa_label))) continue; dn_dev_del_ifa(dn_db, ifap, 1); @@ -705,7 +705,7 @@ static int dn_dev_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *a ifa->ifa_scope = ifm->ifa_scope; ifa->ifa_dev = dn_db; if (rta[IFA_LABEL-1]) - memcpy(ifa->ifa_label, RTA_DATA(rta[IFA_LABEL-1]), IFNAMSIZ); + rtattr_strlcpy(ifa->ifa_label, rta[IFA_LABEL-1], IFNAMSIZ); else memcpy(ifa->ifa_label, dev->name, IFNAMSIZ); @@ -1291,59 +1291,6 @@ int unregister_dnaddr_notifier(struct notifier_block *nb) return notifier_chain_unregister(&dnaddr_chain, nb); } -#ifdef CONFIG_DECNET_SIOCGIFCONF -/* - * Now we support multiple addresses per interface. - * Since we don't want to break existing code, you have to enable - * it as a compile time option. Probably you should use the - * rtnetlink interface instead. - */ -int dnet_gifconf(struct net_device *dev, char __user *buf, int len) -{ - struct dn_dev *dn_db = (struct dn_dev *)dev->dn_ptr; - struct dn_ifaddr *ifa; - char buffer[DN_IFREQ_SIZE]; - struct ifreq *ifr = (struct ifreq *)buffer; - struct sockaddr_dn *addr = (struct sockaddr_dn *)&ifr->ifr_addr; - int done = 0; - - if ((dn_db == NULL) || ((ifa = dn_db->ifa_list) == NULL)) - return 0; - - for(; ifa; ifa = ifa->ifa_next) { - if (!buf) { - done += sizeof(DN_IFREQ_SIZE); - continue; - } - if (len < DN_IFREQ_SIZE) - return done; - memset(buffer, 0, DN_IFREQ_SIZE); - - if (ifa->ifa_label) - strcpy(ifr->ifr_name, ifa->ifa_label); - else - strcpy(ifr->ifr_name, dev->name); - - addr->sdn_family = AF_DECnet; - addr->sdn_add.a_len = 2; - memcpy(addr->sdn_add.a_addr, &ifa->ifa_local, - sizeof(dn_address)); - - if (copy_to_user(buf, buffer, DN_IFREQ_SIZE)) { - done = -EFAULT; - break; - } - - buf += DN_IFREQ_SIZE; - len -= DN_IFREQ_SIZE; - done += DN_IFREQ_SIZE; - } - - return done; -} -#endif /* CONFIG_DECNET_SIOCGIFCONF */ - - #ifdef CONFIG_PROC_FS static inline struct net_device *dn_dev_get_next(struct seq_file *seq, struct net_device *dev) { @@ -1484,8 +1431,7 @@ static struct rtnetlink_link dnet_rtnetlink_table[RTM_MAX-RTM_BASE+1] = }; static int __initdata addr[2]; -static int __initdata num; -module_param_array(addr, int, num, 0444); +module_param_array(addr, int, NULL, 0444); MODULE_PARM_DESC(addr, "The DECnet address of this machine: area,node"); void __init dn_dev_init(void) @@ -1503,9 +1449,6 @@ void __init dn_dev_init(void) decnet_address = dn_htons((addr[0] << 10) | addr[1]); dn_dev_devices_on(); -#ifdef CONFIG_DECNET_SIOCGIFCONF - register_gifconf(PF_DECnet, dnet_gifconf); -#endif /* CONFIG_DECNET_SIOCGIFCONF */ rtnetlink_links[PF_DECnet] = dnet_rtnetlink_table; @@ -1524,10 +1467,6 @@ void __exit dn_dev_cleanup(void) { rtnetlink_links[PF_DECnet] = NULL; -#ifdef CONFIG_DECNET_SIOCGIFCONF - unregister_gifconf(PF_DECnet); -#endif /* CONFIG_DECNET_SIOCGIFCONF */ - #ifdef CONFIG_SYSCTL { int i;