netlink.h
001: #ifndef __LINUX_NETLINK_H
002: #define __LINUX_NETLINK_H
003:
004: #include <linux/socket.h>
005: #include <linux/types.h>
006:
007: #define NETLINK_ROUTE 0
008: #define NETLINK_UNUSED 1
009: #define NETLINK_USERSOCK 2
010: #define NETLINK_FIREWALL 3
011: #define NETLINK_INET_DIAG 4
012: #define NETLINK_NFLOG 5
013: #define NETLINK_XFRM 6
014: #define NETLINK_SELINUX 7
015: #define NETLINK_ISCSI 8
016: #define NETLINK_AUDIT 9
017: #define NETLINK_FIB_LOOKUP 10
018: #define NETLINK_CONNECTOR 11
019: #define NETLINK_NETFILTER 12
020: #define NETLINK_IP6_FW 13
021: #define NETLINK_DNRTMSG 14
022: #define NETLINK_KOBJECT_UEVENT 15
023: #define NETLINK_GENERIC 16
024:
025: #define NETLINK_SCSITRANSPORT 18
026: #define NETLINK_ECRYPTFS 19
027: #define NETLINK_RDMA 20
028: #define NETLINK_CRYPTO 21
029:
030: #define MAX_LINKS 32
031:
032: struct sockaddr_nl {
033: __kernel_sa_family_t nl_family;
034: unsigned short nl_pad;
035: __u32 nl_pid;
036: __u32 nl_groups;
037: };
038:
039: struct nlmsghdr {
040: __u32 nlmsg_len;
041: __u16 nlmsg_type;
042: __u16 nlmsg_flags;
043: __u32 nlmsg_seq;
044: __u32 nlmsg_pid;
045: };
046:
047:
048:
049: #define NLM_F_REQUEST 1
050: #define NLM_F_MULTI 2
051: #define NLM_F_ACK 4
052: #define NLM_F_ECHO 8
053: #define NLM_F_DUMP_INTR 16
054:
055:
056: #define NLM_F_ROOT 0x100
057: #define NLM_F_MATCH 0x200
058: #define NLM_F_ATOMIC 0x400
059: #define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH)
060:
061:
062: #define NLM_F_REPLACE 0x100
063: #define NLM_F_EXCL 0x200
064: #define NLM_F_CREATE 0x400
065: #define NLM_F_APPEND 0x800
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076: #define NLMSG_ALIGNTO 4U
077: #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
078: #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
079: #define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
080: #define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
081: #define NLMSG_DATA(nlh) ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
082: #define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
083: (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
084: #define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
085: (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
086: (nlh)->nlmsg_len <= (len))
087: #define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
088:
089: #define NLMSG_NOOP 0x1
090: #define NLMSG_ERROR 0x2
091: #define NLMSG_DONE 0x3
092: #define NLMSG_OVERRUN 0x4
093:
094: #define NLMSG_MIN_TYPE 0x10
095:
096: struct nlmsgerr {
097: int error;
098: struct nlmsghdr msg;
099: };
100:
101: #define NETLINK_ADD_MEMBERSHIP 1
102: #define NETLINK_DROP_MEMBERSHIP 2
103: #define NETLINK_PKTINFO 3
104: #define NETLINK_BROADCAST_ERROR 4
105: #define NETLINK_NO_ENOBUFS 5
106:
107: struct nl_pktinfo {
108: __u32 group;
109: };
110:
111: #define NET_MAJOR 36
112:
113: enum {
114: NETLINK_UNCONNECTED = 0,
115: NETLINK_CONNECTED,
116: };
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127: struct nlattr {
128: __u16 nla_len;
129: __u16 nla_type;
130: };
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142: #define NLA_F_NESTED (1 << 15)
143: #define NLA_F_NET_BYTEORDER (1 << 14)
144: #define NLA_TYPE_MASK ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
145:
146: #define NLA_ALIGNTO 4
147: #define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
148: #define NLA_HDRLEN ((int) NLA_ALIGN(sizeof(struct nlattr)))
149:
150:
151: #endif
152:
© Andrew Scott 2006 -
2024,
All Rights Reserved