Line data Source code
1 : #ifndef __NET_RTNETLINK_H
2 : #define __NET_RTNETLINK_H
3 :
4 : #include <linux/rtnetlink.h>
5 : #include <net/netlink.h>
6 :
7 : typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, void *);
8 : typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);
9 :
10 : extern int __rtnl_register(int protocol, int msgtype,
11 : rtnl_doit_func, rtnl_dumpit_func);
12 : extern void rtnl_register(int protocol, int msgtype,
13 : rtnl_doit_func, rtnl_dumpit_func);
14 : extern int rtnl_unregister(int protocol, int msgtype);
15 : extern void rtnl_unregister_all(int protocol);
16 :
17 : static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
18 : {
19 : if (nlmsg_len(nlh) >= sizeof(struct rtgenmsg))
20 : return ((struct rtgenmsg *) nlmsg_data(nlh))->rtgen_family;
21 : else
22 : return AF_UNSPEC;
23 : }
24 1 :
25 : /**
26 : * struct rtnl_link_ops - rtnetlink link operations
27 : *
28 : * @list: Used internally
29 : * @kind: Identifier
30 : * @maxtype: Highest device specific netlink attribute number
31 : * @policy: Netlink policy for device specific attribute validation
32 : * @validate: Optional validation function for netlink/changelink parameters
33 : * @priv_size: sizeof net_device private space
34 : * @setup: net_device setup function
35 : * @newlink: Function for configuring and registering a new device
36 : * @changelink: Function for changing parameters of an existing device
37 : * @dellink: Function to remove a device
38 : * @get_size: Function to calculate required room for dumping device
39 : * specific netlink attributes
40 : * @fill_info: Function to dump device specific netlink attributes
41 : * @get_xstats_size: Function to calculate required room for dumping devic
42 : * specific statistics
43 : * @fill_xstats: Function to dump device specific statistics
44 : */
45 : struct rtnl_link_ops {
46 : struct list_head list;
47 :
48 : const char *kind;
49 :
50 : size_t priv_size;
51 : void (*setup)(struct net_device *dev);
52 :
53 : int maxtype;
54 : const struct nla_policy *policy;
55 : int (*validate)(struct nlattr *tb[],
56 : struct nlattr *data[]);
57 :
58 : int (*newlink)(struct net *src_net,
59 : struct net_device *dev,
60 : struct nlattr *tb[],
61 : struct nlattr *data[]);
62 : int (*changelink)(struct net_device *dev,
63 : struct nlattr *tb[],
64 : struct nlattr *data[]);
65 : void (*dellink)(struct net_device *dev,
66 : struct list_head *head);
67 :
68 : size_t (*get_size)(const struct net_device *dev);
69 : int (*fill_info)(struct sk_buff *skb,
70 : const struct net_device *dev);
71 :
72 : size_t (*get_xstats_size)(const struct net_device *dev);
73 : int (*fill_xstats)(struct sk_buff *skb,
74 : const struct net_device *dev);
75 : int (*get_tx_queues)(struct net *net, struct nlattr *tb[],
76 : unsigned int *tx_queues,
77 : unsigned int *real_tx_queues);
78 : };
79 :
80 : extern int __rtnl_link_register(struct rtnl_link_ops *ops);
81 : extern void __rtnl_link_unregister(struct rtnl_link_ops *ops);
82 : extern void rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops);
83 :
84 : extern int rtnl_link_register(struct rtnl_link_ops *ops);
85 : extern void rtnl_link_unregister(struct rtnl_link_ops *ops);
86 :
87 : extern struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);
88 : extern struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
89 : char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[]);
90 : extern const struct nla_policy ifla_policy[IFLA_MAX+1];
91 2 :
92 : #define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind)
93 :
94 : #endif
|