vserver 1.9.5.x5
[linux-2.6.git] / include / linux / rtnetlink.h
index 4b3a0b5..c3d5d04 100644 (file)
@@ -9,49 +9,89 @@
 
 /* Types of messages */
 
-#define RTM_BASE       0x10
-
-#define        RTM_NEWLINK     (RTM_BASE+0)
-#define        RTM_DELLINK     (RTM_BASE+1)
-#define        RTM_GETLINK     (RTM_BASE+2)
-#define        RTM_SETLINK     (RTM_BASE+3)
-
-#define        RTM_NEWADDR     (RTM_BASE+4)
-#define        RTM_DELADDR     (RTM_BASE+5)
-#define        RTM_GETADDR     (RTM_BASE+6)
-
-#define        RTM_NEWROUTE    (RTM_BASE+8)
-#define        RTM_DELROUTE    (RTM_BASE+9)
-#define        RTM_GETROUTE    (RTM_BASE+10)
-
-#define        RTM_NEWNEIGH    (RTM_BASE+12)
-#define        RTM_DELNEIGH    (RTM_BASE+13)
-#define        RTM_GETNEIGH    (RTM_BASE+14)
-
-#define        RTM_NEWRULE     (RTM_BASE+16)
-#define        RTM_DELRULE     (RTM_BASE+17)
-#define        RTM_GETRULE     (RTM_BASE+18)
-
-#define        RTM_NEWQDISC    (RTM_BASE+20)
-#define        RTM_DELQDISC    (RTM_BASE+21)
-#define        RTM_GETQDISC    (RTM_BASE+22)
-
-#define        RTM_NEWTCLASS   (RTM_BASE+24)
-#define        RTM_DELTCLASS   (RTM_BASE+25)
-#define        RTM_GETTCLASS   (RTM_BASE+26)
-
-#define        RTM_NEWTFILTER  (RTM_BASE+28)
-#define        RTM_DELTFILTER  (RTM_BASE+29)
-#define        RTM_GETTFILTER  (RTM_BASE+30)
-
-#define RTM_NEWPREFIX  (RTM_BASE+36)
-#define RTM_GETPREFIX  (RTM_BASE+38)
-
-#define        RTM_GETMULTICAST (RTM_BASE+42)
-
-#define        RTM_GETANYCAST  (RTM_BASE+46)
-
-#define        RTM_MAX         (RTM_BASE+47)
+enum {
+       RTM_BASE        = 16,
+#define RTM_BASE       RTM_BASE
+
+       RTM_NEWLINK     = 16,
+#define RTM_NEWLINK    RTM_NEWLINK
+       RTM_DELLINK,
+#define RTM_DELLINK    RTM_DELLINK
+       RTM_GETLINK,
+#define RTM_GETLINK    RTM_GETLINK
+       RTM_SETLINK,
+#define RTM_SETLINK    RTM_SETLINK
+
+       RTM_NEWADDR     = 20,
+#define RTM_NEWADDR    RTM_NEWADDR
+       RTM_DELADDR,
+#define RTM_DELADDR    RTM_DELADDR
+       RTM_GETADDR,
+#define RTM_GETADDR    RTM_GETADDR
+
+       RTM_NEWROUTE    = 24,
+#define RTM_NEWROUTE   RTM_NEWROUTE
+       RTM_DELROUTE,
+#define RTM_DELROUTE   RTM_DELROUTE
+       RTM_GETROUTE,
+#define RTM_GETROUTE   RTM_GETROUTE
+
+       RTM_NEWNEIGH    = 28,
+#define RTM_NEWNEIGH   RTM_NEWNEIGH
+       RTM_DELNEIGH,
+#define RTM_DELNEIGH   RTM_DELNEIGH
+       RTM_GETNEIGH,
+#define RTM_GETNEIGH   RTM_GETNEIGH
+
+       RTM_NEWRULE     = 32,
+#define RTM_NEWRULE    RTM_NEWRULE
+       RTM_DELRULE,
+#define RTM_DELRULE    RTM_DELRULE
+       RTM_GETRULE,
+#define RTM_GETRULE    RTM_GETRULE
+
+       RTM_NEWQDISC    = 36,
+#define RTM_NEWQDISC   RTM_NEWQDISC
+       RTM_DELQDISC,
+#define RTM_DELQDISC   RTM_DELQDISC
+       RTM_GETQDISC,
+#define RTM_GETQDISC   RTM_GETQDISC
+
+       RTM_NEWTCLASS   = 40,
+#define RTM_NEWTCLASS  RTM_NEWTCLASS
+       RTM_DELTCLASS,
+#define RTM_DELTCLASS  RTM_DELTCLASS
+       RTM_GETTCLASS,
+#define RTM_GETTCLASS  RTM_GETTCLASS
+
+       RTM_NEWTFILTER  = 44,
+#define RTM_NEWTFILTER RTM_NEWTFILTER
+       RTM_DELTFILTER,
+#define RTM_DELTFILTER RTM_DELTFILTER
+       RTM_GETTFILTER,
+#define RTM_GETTFILTER RTM_GETTFILTER
+
+       RTM_NEWACTION   = 48,
+#define RTM_NEWACTION   RTM_NEWACTION
+       RTM_DELACTION,
+#define RTM_DELACTION   RTM_DELACTION
+       RTM_GETACTION,
+#define RTM_GETACTION   RTM_GETACTION
+
+       RTM_NEWPREFIX   = 52,
+#define RTM_NEWPREFIX  RTM_NEWPREFIX
+       RTM_GETPREFIX   = 54,
+#define RTM_GETPREFIX  RTM_GETPREFIX
+
+       RTM_GETMULTICAST = 58,
+#define RTM_GETMULTICAST RTM_GETMULTICAST
+
+       RTM_GETANYCAST  = 62,
+#define RTM_GETANYCAST RTM_GETANYCAST
+
+       RTM_MAX,
+#define RTM_MAX                RTM_MAX
+};
 
 /* 
    Generic structure for encapsulation of optional route information.
@@ -69,7 +109,8 @@ struct rtattr
 
 #define RTA_ALIGNTO    4
 #define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
-#define RTA_OK(rta,len) ((len) > 0 && (rta)->rta_len >= sizeof(struct rtattr) && \
+#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
+                        (rta)->rta_len >= sizeof(struct rtattr) && \
                         (rta)->rta_len <= (len))
 #define RTA_NEXT(rta,attrlen)  ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
                                 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
@@ -536,6 +577,17 @@ struct rtnl_link_stats
        __u32   tx_compressed;
 };
 
+/* The struct should be in sync with struct ifmap */
+struct rtnl_link_ifmap
+{
+       __u64   mem_start;
+       __u64   mem_end;
+       __u64   base_addr;
+       __u16   irq;
+       __u8    dma;
+       __u8    port;
+};
+
 enum
 {
        IFLA_UNSPEC,
@@ -556,6 +608,12 @@ enum
 #define IFLA_WIRELESS IFLA_WIRELESS
        IFLA_PROTINFO,          /* Protocol specific information for a link */
 #define IFLA_PROTINFO IFLA_PROTINFO
+       IFLA_TXQLEN,
+#define IFLA_TXQLEN IFLA_TXQLEN
+       IFLA_MAP,
+#define IFLA_MAP IFLA_MAP
+       IFLA_WEIGHT,
+#define IFLA_WEIGHT IFLA_WEIGHT
        __IFLA_MAX
 };
 
@@ -639,6 +697,9 @@ enum
        TCA_STATS,
        TCA_XSTATS,
        TCA_RATE,
+       TCA_FCNT,
+       TCA_STATS2,
+       TCA_ACT_STATS,
        __TCA_MAX
 };
 
@@ -648,10 +709,6 @@ enum
 #define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
 
 
-/* SUMMARY: maximal rtattr understood by kernel */
-
-#define RTATTR_MAX             RTA_MAX
-
 /* RTnetlink multicast groups */
 
 #define RTMGRP_LINK            1
@@ -673,12 +730,25 @@ enum
 
 #define RTMGRP_IPV6_PREFIX     0x20000
 
+/* TC action piece */
+struct tcamsg
+{
+       unsigned char   tca_family;
+       unsigned char   tca__pad1;
+       unsigned short  tca__pad2;
+};
+#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
+#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
+#define TCA_ACT_TAB 1 /* attr type must be >=1 */      
+#define TCAA_MAX 1
+
 /* End of information exported to user level */
 
 #ifdef __KERNEL__
 
 #include <linux/config.h>
 
+extern size_t rtattr_strlcpy(char *dest, const struct rtattr *rta, size_t size);
 static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str)
 {
        int len = strlen(str) + 1;
@@ -687,6 +757,9 @@ static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str)
 
 extern int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len);
 
+#define rtattr_parse_nested(tb, max, rta) \
+       rtattr_parse((tb), (max), RTA_DATA((rta)), RTA_PAYLOAD((rta)))
+
 extern struct sock *rtnl;
 
 struct rtnetlink_link
@@ -696,7 +769,6 @@ struct rtnetlink_link
 };
 
 extern struct rtnetlink_link * rtnetlink_links[NPROTO];
-extern int rtnetlink_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb);
 extern int rtnetlink_send(struct sk_buff *skb, u32 pid, u32 group, int echo);
 extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics);
 
@@ -728,10 +800,6 @@ extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change);
 
 extern struct semaphore rtnl_sem;
 
-#define rtnl_exlock()          do { } while(0)
-#define rtnl_exunlock()                do { } while(0)
-#define rtnl_exlock_nowait()   (0)
-
 #define rtnl_shlock()          down(&rtnl_sem)
 #define rtnl_shlock_nowait()   down_trylock(&rtnl_sem)
 
@@ -741,6 +809,7 @@ extern struct semaphore rtnl_sem;
                        } while(0)
 
 extern void rtnl_lock(void);
+extern int rtnl_lock_interruptible(void);
 extern void rtnl_unlock(void);
 extern void rtnetlink_init(void);