summaryrefslogtreecommitdiffstats
path: root/libc/kernel/common/linux/netlink.h
blob: 75e889aaa161357d2ed4e07c1febbf9ac8bae80c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef __LINUX_NETLINK_H
#define __LINUX_NETLINK_H

#include <linux/socket.h>  
#include <linux/types.h>

#define NETLINK_ROUTE 0  
#define NETLINK_UNUSED 1  
#define NETLINK_USERSOCK 2  
#define NETLINK_FIREWALL 3  
#define NETLINK_INET_DIAG 4  
#define NETLINK_NFLOG 5  
#define NETLINK_XFRM 6  
#define NETLINK_SELINUX 7  
#define NETLINK_ISCSI 8  
#define NETLINK_AUDIT 9  
#define NETLINK_FIB_LOOKUP 10 
#define NETLINK_CONNECTOR 11
#define NETLINK_NETFILTER 12  
#define NETLINK_IP6_FW 13
#define NETLINK_DNRTMSG 14  
#define NETLINK_KOBJECT_UEVENT 15  
#define NETLINK_GENERIC 16

#define NETLINK_SCSITRANSPORT 18  
#define NETLINK_ECRYPTFS 19

#define MAX_LINKS 32 

struct net;

struct sockaddr_nl
{
 sa_family_t nl_family;
 unsigned short nl_pad;
 __u32 nl_pid;
 __u32 nl_groups;
};

struct nlmsghdr
{
 __u32 nlmsg_len;
 __u16 nlmsg_type;
 __u16 nlmsg_flags;
 __u32 nlmsg_seq;
 __u32 nlmsg_pid;
};

#define NLM_F_REQUEST 1  
#define NLM_F_MULTI 2  
#define NLM_F_ACK 4  
#define NLM_F_ECHO 8  

#define NLM_F_ROOT 0x100  
#define NLM_F_MATCH 0x200  
#define NLM_F_ATOMIC 0x400  
#define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH)

#define NLM_F_REPLACE 0x100  
#define NLM_F_EXCL 0x200  
#define NLM_F_CREATE 0x400  
#define NLM_F_APPEND 0x800  

#define NLMSG_ALIGNTO 4
#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
#define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
#define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
#define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len),   (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) &&   (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) &&   (nlh)->nlmsg_len <= (len))
#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))

#define NLMSG_NOOP 0x1  
#define NLMSG_ERROR 0x2  
#define NLMSG_DONE 0x3  
#define NLMSG_OVERRUN 0x4  

#define NLMSG_MIN_TYPE 0x10  

struct nlmsgerr
{
 int error;
 struct nlmsghdr msg;
};

#define NETLINK_ADD_MEMBERSHIP 1
#define NETLINK_DROP_MEMBERSHIP 2
#define NETLINK_PKTINFO 3
#define NETLINK_BROADCAST_ERROR 4
#define NETLINK_NO_ENOBUFS 5

struct nl_pktinfo
{
 __u32 group;
};

#define NET_MAJOR 36  

enum {
 NETLINK_UNCONNECTED = 0,
 NETLINK_CONNECTED,
};

struct nlattr
{
 __u16 nla_len;
 __u16 nla_type;
};

#define NLA_F_NESTED (1 << 15)
#define NLA_F_NET_BYTEORDER (1 << 14)
#define NLA_TYPE_MASK ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)

#define NLA_ALIGNTO 4
#define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
#define NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr)))

#endif