Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtnetlink: Remove passing of attributes into rtnl_doit functions

With decnet converted, we can finally get rid of rta_buf and its
computations around it. It also gets rid of the minimal header
length verification since all message handlers do that explicitly
anyway.

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Thomas Graf and committed by
David S. Miller
661d2967 58d7d8f9

+47 -117
+1 -1
include/net/rtnetlink.h
··· 4 4 #include <linux/rtnetlink.h> 5 5 #include <net/netlink.h> 6 6 7 - typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, void *); 7 + typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *); 8 8 typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *); 9 9 typedef u16 (*rtnl_calcit_func)(struct sk_buff *, struct nlmsghdr *); 10 10
+2 -2
net/bridge/br_mdb.c
··· 382 382 return ret; 383 383 } 384 384 385 - static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 385 + static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) 386 386 { 387 387 struct net *net = sock_net(skb->sk); 388 388 struct br_mdb_entry *entry; ··· 458 458 return err; 459 459 } 460 460 461 - static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 461 + static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) 462 462 { 463 463 struct net_device *dev; 464 464 struct br_mdb_entry *entry;
+2 -3
net/can/gw.c
··· 778 778 return 0; 779 779 } 780 780 781 - static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh, 782 - void *arg) 781 + static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh) 783 782 { 784 783 struct rtcanmsg *r; 785 784 struct cgw_job *gwj; ··· 867 868 } 868 869 } 869 870 870 - static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 871 + static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh) 871 872 { 872 873 struct cgw_job *gwj = NULL; 873 874 struct hlist_node *nx;
+2 -2
net/core/fib_rules.c
··· 266 266 return err; 267 267 } 268 268 269 - static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 269 + static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh) 270 270 { 271 271 struct net *net = sock_net(skb->sk); 272 272 struct fib_rule_hdr *frh = nlmsg_data(nlh); ··· 415 415 return err; 416 416 } 417 417 418 - static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 418 + static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh) 419 419 { 420 420 struct net *net = sock_net(skb->sk); 421 421 struct fib_rule_hdr *frh = nlmsg_data(nlh);
+3 -3
net/core/neighbour.c
··· 1613 1613 } 1614 1614 EXPORT_SYMBOL(neigh_table_clear); 1615 1615 1616 - static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1616 + static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh) 1617 1617 { 1618 1618 struct net *net = sock_net(skb->sk); 1619 1619 struct ndmsg *ndm; ··· 1677 1677 return err; 1678 1678 } 1679 1679 1680 - static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1680 + static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh) 1681 1681 { 1682 1682 struct net *net = sock_net(skb->sk); 1683 1683 struct ndmsg *ndm; ··· 1955 1955 [NDTPA_LOCKTIME] = { .type = NLA_U64 }, 1956 1956 }; 1957 1957 1958 - static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1958 + static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh) 1959 1959 { 1960 1960 struct net *net = sock_net(skb->sk); 1961 1961 struct neigh_table *tbl;
+9 -73
net/core/rtnetlink.c
··· 515 515 return err; 516 516 } 517 517 518 - static const int rtm_min[RTM_NR_FAMILIES] = 519 - { 520 - [RTM_FAM(RTM_NEWLINK)] = NLMSG_LENGTH(sizeof(struct ifinfomsg)), 521 - [RTM_FAM(RTM_NEWADDR)] = NLMSG_LENGTH(sizeof(struct ifaddrmsg)), 522 - [RTM_FAM(RTM_NEWROUTE)] = NLMSG_LENGTH(sizeof(struct rtmsg)), 523 - [RTM_FAM(RTM_NEWRULE)] = NLMSG_LENGTH(sizeof(struct fib_rule_hdr)), 524 - [RTM_FAM(RTM_NEWQDISC)] = NLMSG_LENGTH(sizeof(struct tcmsg)), 525 - [RTM_FAM(RTM_NEWTCLASS)] = NLMSG_LENGTH(sizeof(struct tcmsg)), 526 - [RTM_FAM(RTM_NEWTFILTER)] = NLMSG_LENGTH(sizeof(struct tcmsg)), 527 - [RTM_FAM(RTM_NEWACTION)] = NLMSG_LENGTH(sizeof(struct tcamsg)), 528 - [RTM_FAM(RTM_GETMULTICAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), 529 - [RTM_FAM(RTM_GETANYCAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)), 530 - }; 531 - 532 - static const int rta_max[RTM_NR_FAMILIES] = 533 - { 534 - [RTM_FAM(RTM_NEWLINK)] = IFLA_MAX, 535 - [RTM_FAM(RTM_NEWADDR)] = IFA_MAX, 536 - [RTM_FAM(RTM_NEWROUTE)] = RTA_MAX, 537 - [RTM_FAM(RTM_NEWRULE)] = FRA_MAX, 538 - [RTM_FAM(RTM_NEWQDISC)] = TCA_MAX, 539 - [RTM_FAM(RTM_NEWTCLASS)] = TCA_MAX, 540 - [RTM_FAM(RTM_NEWTFILTER)] = TCA_MAX, 541 - [RTM_FAM(RTM_NEWACTION)] = TCAA_MAX, 542 - }; 543 - 544 518 int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned int group, int echo) 545 519 { 546 520 struct sock *rtnl = net->rtnl; ··· 1511 1537 return err; 1512 1538 } 1513 1539 1514 - static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1540 + static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) 1515 1541 { 1516 1542 struct net *net = sock_net(skb->sk); 1517 1543 struct ifinfomsg *ifm; ··· 1552 1578 return err; 1553 1579 } 1554 1580 1555 - static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1581 + static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) 1556 1582 { 1557 1583 struct net *net = sock_net(skb->sk); 1558 1584 const struct rtnl_link_ops *ops; ··· 1683 1709 return 0; 1684 1710 } 1685 1711 1686 - static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1712 + static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh) 1687 1713 { 1688 1714 struct net *net = sock_net(skb->sk); 1689 1715 const struct rtnl_link_ops *ops; ··· 1838 1864 } 1839 1865 } 1840 1866 1841 - static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 1867 + static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh) 1842 1868 { 1843 1869 struct net *net = sock_net(skb->sk); 1844 1870 struct ifinfomsg *ifm; ··· 2055 2081 } 2056 2082 EXPORT_SYMBOL(ndo_dflt_fdb_add); 2057 2083 2058 - static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 2084 + static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) 2059 2085 { 2060 2086 struct net *net = sock_net(skb->sk); 2061 2087 struct ndmsg *ndm; ··· 2153 2179 } 2154 2180 EXPORT_SYMBOL(ndo_dflt_fdb_del); 2155 2181 2156 - static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 2182 + static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) 2157 2183 { 2158 2184 struct net *net = sock_net(skb->sk); 2159 2185 struct ndmsg *ndm; ··· 2452 2478 return err; 2453 2479 } 2454 2480 2455 - static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, 2456 - void *arg) 2481 + static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) 2457 2482 { 2458 2483 struct net *net = sock_net(skb->sk); 2459 2484 struct ifinfomsg *ifm; ··· 2522 2549 return err; 2523 2550 } 2524 2551 2525 - static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, 2526 - void *arg) 2552 + static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) 2527 2553 { 2528 2554 struct net *net = sock_net(skb->sk); 2529 2555 struct ifinfomsg *ifm; ··· 2592 2620 return err; 2593 2621 } 2594 2622 2595 - /* Protected by RTNL sempahore. */ 2596 - static struct rtattr **rta_buf; 2597 - static int rtattr_max; 2598 - 2599 2623 /* Process one rtnetlink message. */ 2600 2624 2601 2625 static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) ··· 2599 2631 struct net *net = sock_net(skb->sk); 2600 2632 rtnl_doit_func doit; 2601 2633 int sz_idx, kind; 2602 - int min_len; 2603 2634 int family; 2604 2635 int type; 2605 2636 int err; ··· 2646 2679 return err; 2647 2680 } 2648 2681 2649 - memset(rta_buf, 0, (rtattr_max * sizeof(struct rtattr *))); 2650 - 2651 - min_len = rtm_min[sz_idx]; 2652 - if (nlh->nlmsg_len < min_len) 2653 - return -EINVAL; 2654 - 2655 - if (nlh->nlmsg_len > min_len) { 2656 - int attrlen = nlh->nlmsg_len - NLMSG_ALIGN(min_len); 2657 - struct rtattr *attr = (void *)nlh + NLMSG_ALIGN(min_len); 2658 - 2659 - while (RTA_OK(attr, attrlen)) { 2660 - unsigned int flavor = attr->rta_type & NLA_TYPE_MASK; 2661 - if (flavor) { 2662 - if (flavor > rta_max[sz_idx]) 2663 - return -EINVAL; 2664 - rta_buf[flavor-1] = attr; 2665 - } 2666 - attr = RTA_NEXT(attr, attrlen); 2667 - } 2668 - } 2669 - 2670 2682 doit = rtnl_get_doit(family, type); 2671 2683 if (doit == NULL) 2672 2684 return -EOPNOTSUPP; 2673 2685 2674 - return doit(skb, nlh, (void *)&rta_buf[0]); 2686 + return doit(skb, nlh); 2675 2687 } 2676 2688 2677 2689 static void rtnetlink_rcv(struct sk_buff *skb) ··· 2720 2774 2721 2775 void __init rtnetlink_init(void) 2722 2776 { 2723 - int i; 2724 - 2725 - rtattr_max = 0; 2726 - for (i = 0; i < ARRAY_SIZE(rta_max); i++) 2727 - if (rta_max[i] > rtattr_max) 2728 - rtattr_max = rta_max[i]; 2729 - rta_buf = kmalloc(rtattr_max * sizeof(struct rtattr *), GFP_KERNEL); 2730 - if (!rta_buf) 2731 - panic("rtnetlink_init: cannot allocate rta_buf\n"); 2732 - 2733 2777 if (register_pernet_subsys(&rtnetlink_net_ops)) 2734 2778 panic("rtnetlink_init: cannot initialize rtnetlink\n"); 2735 2779
+1 -1
net/dcb/dcbnl.c
··· 1658 1658 [DCB_CMD_CEE_GET] = { RTM_GETDCB, dcbnl_cee_get }, 1659 1659 }; 1660 1660 1661 - static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1661 + static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 1662 1662 { 1663 1663 struct net *net = sock_net(skb->sk); 1664 1664 struct net_device *netdev;
+2 -2
net/decnet/dn_dev.c
··· 563 563 .len = IFNAMSIZ - 1 }, 564 564 }; 565 565 566 - static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 566 + static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) 567 567 { 568 568 struct net *net = sock_net(skb->sk); 569 569 struct nlattr *tb[IFA_MAX+1]; ··· 607 607 return err; 608 608 } 609 609 610 - static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 610 + static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) 611 611 { 612 612 struct net *net = sock_net(skb->sk); 613 613 struct nlattr *tb[IFA_MAX+1];
+2 -2
net/decnet/dn_fib.c
··· 511 511 return table; 512 512 } 513 513 514 - static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 514 + static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) 515 515 { 516 516 struct net *net = sock_net(skb->sk); 517 517 struct dn_fib_table *tb; ··· 536 536 return tb->delete(tb, r, attrs, nlh, &NETLINK_CB(skb)); 537 537 } 538 538 539 - static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 539 + static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) 540 540 { 541 541 struct net *net = sock_net(skb->sk); 542 542 struct dn_fib_table *tb;
+1 -1
net/decnet/dn_route.c
··· 1616 1616 /* 1617 1617 * This is called by both endnodes and routers now. 1618 1618 */ 1619 - static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void *arg) 1619 + static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) 1620 1620 { 1621 1621 struct net *net = sock_net(in_skb->sk); 1622 1622 struct rtmsg *rtm = nlmsg_data(nlh);
+3 -4
net/ipv4/devinet.c
··· 536 536 return NULL; 537 537 } 538 538 539 - static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 539 + static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) 540 540 { 541 541 struct net *net = sock_net(skb->sk); 542 542 struct nlattr *tb[IFA_MAX+1]; ··· 775 775 return NULL; 776 776 } 777 777 778 - static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 778 + static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) 779 779 { 780 780 struct net *net = sock_net(skb->sk); 781 781 struct in_ifaddr *ifa; ··· 1730 1730 }; 1731 1731 1732 1732 static int inet_netconf_get_devconf(struct sk_buff *in_skb, 1733 - struct nlmsghdr *nlh, 1734 - void *arg) 1733 + struct nlmsghdr *nlh) 1735 1734 { 1736 1735 struct net *net = sock_net(in_skb->sk); 1737 1736 struct nlattr *tb[NETCONFA_MAX+1];
+2 -2
net/ipv4/fib_frontend.c
··· 604 604 return err; 605 605 } 606 606 607 - static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 607 + static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) 608 608 { 609 609 struct net *net = sock_net(skb->sk); 610 610 struct fib_config cfg; ··· 626 626 return err; 627 627 } 628 628 629 - static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 629 + static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) 630 630 { 631 631 struct net *net = sock_net(skb->sk); 632 632 struct fib_config cfg;
+1 -1
net/ipv4/route.c
··· 2311 2311 return -EMSGSIZE; 2312 2312 } 2313 2313 2314 - static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void *arg) 2314 + static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) 2315 2315 { 2316 2316 struct net *net = sock_net(in_skb->sk); 2317 2317 struct rtmsg *rtm;
+4 -6
net/ipv6/addrconf.c
··· 544 544 }; 545 545 546 546 static int inet6_netconf_get_devconf(struct sk_buff *in_skb, 547 - struct nlmsghdr *nlh, 548 - void *arg) 547 + struct nlmsghdr *nlh) 549 548 { 550 549 struct net *net = sock_net(in_skb->sk); 551 550 struct nlattr *tb[NETCONFA_MAX+1]; ··· 3577 3578 }; 3578 3579 3579 3580 static int 3580 - inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 3581 + inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) 3581 3582 { 3582 3583 struct net *net = sock_net(skb->sk); 3583 3584 struct ifaddrmsg *ifm; ··· 3643 3644 } 3644 3645 3645 3646 static int 3646 - inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 3647 + inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) 3647 3648 { 3648 3649 struct net *net = sock_net(skb->sk); 3649 3650 struct ifaddrmsg *ifm; ··· 3982 3983 return inet6_dump_addr(skb, cb, type); 3983 3984 } 3984 3985 3985 - static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh, 3986 - void *arg) 3986 + static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh) 3987 3987 { 3988 3988 struct net *net = sock_net(in_skb->sk); 3989 3989 struct ifaddrmsg *ifm;
+2 -4
net/ipv6/addrlabel.c
··· 414 414 [IFAL_LABEL] = { .len = sizeof(u32), }, 415 415 }; 416 416 417 - static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh, 418 - void *arg) 417 + static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh) 419 418 { 420 419 struct net *net = sock_net(skb->sk); 421 420 struct ifaddrlblmsg *ifal; ··· 529 530 + nla_total_size(4); /* IFAL_LABEL */ 530 531 } 531 532 532 - static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr* nlh, 533 - void *arg) 533 + static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr* nlh) 534 534 { 535 535 struct net *net = sock_net(in_skb->sk); 536 536 struct ifaddrlblmsg *ifal;
+3 -3
net/ipv6/route.c
··· 2355 2355 return last_err; 2356 2356 } 2357 2357 2358 - static int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 2358 + static int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr* nlh) 2359 2359 { 2360 2360 struct fib6_config cfg; 2361 2361 int err; ··· 2370 2370 return ip6_route_del(&cfg); 2371 2371 } 2372 2372 2373 - static int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 2373 + static int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh) 2374 2374 { 2375 2375 struct fib6_config cfg; 2376 2376 int err; ··· 2562 2562 prefix, 0, NLM_F_MULTI); 2563 2563 } 2564 2564 2565 - static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg) 2565 + static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh) 2566 2566 { 2567 2567 struct net *net = sock_net(in_skb->sk); 2568 2568 struct nlattr *tb[RTA_MAX+1];
+2 -2
net/phonet/pn_netlink.c
··· 61 61 [IFA_LOCAL] = { .type = NLA_U8 }, 62 62 }; 63 63 64 - static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *attr) 64 + static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 65 65 { 66 66 struct net *net = sock_net(skb->sk); 67 67 struct nlattr *tb[IFA_MAX+1]; ··· 224 224 [RTA_OIF] = { .type = NLA_U32 }, 225 225 }; 226 226 227 - static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *attr) 227 + static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 228 228 { 229 229 struct net *net = sock_net(skb->sk); 230 230 struct nlattr *tb[RTA_MAX+1];
+1 -1
net/sched/act_api.c
··· 982 982 return ret; 983 983 } 984 984 985 - static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n, void *arg) 985 + static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n) 986 986 { 987 987 struct net *net = sock_net(skb->sk); 988 988 struct nlattr *tca[TCA_ACT_MAX + 1];
+1 -1
net/sched/cls_api.c
··· 118 118 119 119 /* Add/change/delete/get a filter node */ 120 120 121 - static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg) 121 + static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) 122 122 { 123 123 struct net *net = sock_net(skb->sk); 124 124 struct nlattr *tca[TCA_MAX + 1];
+3 -3
net/sched/sch_api.c
··· 971 971 * Delete/get qdisc. 972 972 */ 973 973 974 - static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg) 974 + static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n) 975 975 { 976 976 struct net *net = sock_net(skb->sk); 977 977 struct tcmsg *tcm = nlmsg_data(n); ··· 1038 1038 * Create/change qdisc. 1039 1039 */ 1040 1040 1041 - static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg) 1041 + static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n) 1042 1042 { 1043 1043 struct net *net = sock_net(skb->sk); 1044 1044 struct tcmsg *tcm; ··· 1372 1372 1373 1373 1374 1374 1375 - static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n, void *arg) 1375 + static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n) 1376 1376 { 1377 1377 struct net *net = sock_net(skb->sk); 1378 1378 struct tcmsg *tcm = nlmsg_data(n);