Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rtnetlink.h
Go to the documentation of this file.
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 typedef u16 (*rtnl_calcit_func)(struct sk_buff *, struct nlmsghdr *);
10 
11 extern int __rtnl_register(int protocol, int msgtype,
14 extern void rtnl_register(int protocol, int msgtype,
17 extern int rtnl_unregister(int protocol, int msgtype);
18 extern void rtnl_unregister_all(int protocol);
19 
20 static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
21 {
22  if (nlmsg_len(nlh) >= sizeof(struct rtgenmsg))
23  return ((struct rtgenmsg *) nlmsg_data(nlh))->rtgen_family;
24  else
25  return AF_UNSPEC;
26 }
27 
52 struct rtnl_link_ops {
53  struct list_head list;
54 
55  const char *kind;
56 
57  size_t priv_size;
58  void (*setup)(struct net_device *dev);
59 
60  int maxtype;
61  const struct nla_policy *policy;
62  int (*validate)(struct nlattr *tb[],
63  struct nlattr *data[]);
64 
65  int (*newlink)(struct net *src_net,
66  struct net_device *dev,
67  struct nlattr *tb[],
68  struct nlattr *data[]);
70  struct nlattr *tb[],
71  struct nlattr *data[]);
72  void (*dellink)(struct net_device *dev,
73  struct list_head *head);
74 
75  size_t (*get_size)(const struct net_device *dev);
76  int (*fill_info)(struct sk_buff *skb,
77  const struct net_device *dev);
78 
79  size_t (*get_xstats_size)(const struct net_device *dev);
80  int (*fill_xstats)(struct sk_buff *skb,
81  const struct net_device *dev);
82  unsigned int (*get_num_tx_queues)(void);
83  unsigned int (*get_num_rx_queues)(void);
84 };
85 
86 extern int __rtnl_link_register(struct rtnl_link_ops *ops);
87 extern void __rtnl_link_unregister(struct rtnl_link_ops *ops);
88 
89 extern int rtnl_link_register(struct rtnl_link_ops *ops);
90 extern void rtnl_link_unregister(struct rtnl_link_ops *ops);
91 
106 struct rtnl_af_ops {
107  struct list_head list;
108  int family;
109 
111  const struct net_device *dev);
113 
114  int (*validate_link_af)(const struct net_device *dev,
115  const struct nlattr *attr);
117  const struct nlattr *attr);
118 };
119 
120 extern int __rtnl_af_register(struct rtnl_af_ops *ops);
121 extern void __rtnl_af_unregister(struct rtnl_af_ops *ops);
122 
123 extern int rtnl_af_register(struct rtnl_af_ops *ops);
124 extern void rtnl_af_unregister(struct rtnl_af_ops *ops);
125 
126 
127 extern struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);
128 extern struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
129  char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[]);
130 extern int rtnl_configure_link(struct net_device *dev,
131  const struct ifinfomsg *ifm);
132 extern const struct nla_policy ifla_policy[IFLA_MAX+1];
133 
134 #define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind)
135 
136 #endif