Dr Andrew Scott G7VAV

My photo
 
April 2024
Mo Tu We Th Fr Sa Su
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 1 2 3 4 5
6 7 8 9 10 11 12


netlink.h
001: #ifndef __LINUX_NETLINK_H
002: #define __LINUX_NETLINK_H
003: 
004: #include <linux/socket.h> /* for __kernel_sa_family_t */
005: #include <linux/types.h>
006: 
007: #define NETLINK_ROUTE           0       /* Routing/device hook                          */
008: #define NETLINK_UNUSED          1       /* Unused number                                */
009: #define NETLINK_USERSOCK        2       /* Reserved for user mode socket protocols      */
010: #define NETLINK_FIREWALL        3       /* Firewalling hook                             */
011: #define NETLINK_INET_DIAG       4       /* INET socket monitoring                       */
012: #define NETLINK_NFLOG           5       /* netfilter/iptables ULOG */
013: #define NETLINK_XFRM            6       /* ipsec */
014: #define NETLINK_SELINUX         7       /* SELinux event notifications */
015: #define NETLINK_ISCSI           8       /* Open-iSCSI */
016: #define NETLINK_AUDIT           9       /* auditing */
017: #define NETLINK_FIB_LOOKUP      10      
018: #define NETLINK_CONNECTOR       11
019: #define NETLINK_NETFILTER       12      /* netfilter subsystem */
020: #define NETLINK_IP6_FW          13
021: #define NETLINK_DNRTMSG         14      /* DECnet routing messages */
022: #define NETLINK_KOBJECT_UEVENT  15      /* Kernel messages to userspace */
023: #define NETLINK_GENERIC         16
024: /* leave room for NETLINK_DM (DM Events) */
025: #define NETLINK_SCSITRANSPORT   18      /* SCSI Transports */
026: #define NETLINK_ECRYPTFS        19
027: #define NETLINK_RDMA            20
028: #define NETLINK_CRYPTO          21      /* Crypto layer */
029: 
030: #define MAX_LINKS 32            
031: 
032: struct sockaddr_nl {
033:         __kernel_sa_family_t    nl_family;      /* AF_NETLINK   */
034:         unsigned short  nl_pad;         /* zero         */
035:         __u32           nl_pid;         /* port ID      */
036:         __u32           nl_groups;      /* multicast groups mask */
037: };
038: 
039: struct nlmsghdr {
040:         __u32           nlmsg_len;      /* Length of message including header */
041:         __u16           nlmsg_type;     /* Message content */
042:         __u16           nlmsg_flags;    /* Additional flags */
043:         __u32           nlmsg_seq;      /* Sequence number */
044:         __u32           nlmsg_pid;      /* Sending process port ID */
045: };
046: 
047: /* Flags values */
048: 
049: #define NLM_F_REQUEST           1       /* It is request message.       */
050: #define NLM_F_MULTI             2       /* Multipart message, terminated by NLMSG_DONE */
051: #define NLM_F_ACK               4       /* Reply with ack, with zero or error code */
052: #define NLM_F_ECHO              8       /* Echo this request            */
053: #define NLM_F_DUMP_INTR         16      /* Dump was inconsistent due to sequence change */
054: 
055: /* Modifiers to GET request */
056: #define NLM_F_ROOT      0x100   /* specify tree root    */
057: #define NLM_F_MATCH     0x200   /* return all matching  */
058: #define NLM_F_ATOMIC    0x400   /* atomic GET           */
059: #define NLM_F_DUMP      (NLM_F_ROOT|NLM_F_MATCH)
060: 
061: /* Modifiers to NEW request */
062: #define NLM_F_REPLACE   0x100   /* Override existing            */
063: #define NLM_F_EXCL      0x200   /* Do not touch, if it exists   */
064: #define NLM_F_CREATE    0x400   /* Create, if it does not exist */
065: #define NLM_F_APPEND    0x800   /* Add to end of list           */
066: 
067: /*
068:    4.4BSD ADD           NLM_F_CREATE|NLM_F_EXCL
069:    4.4BSD CHANGE        NLM_F_REPLACE
070: 
071:    True CHANGE          NLM_F_CREATE|NLM_F_REPLACE
072:    Append               NLM_F_CREATE
073:    Check                NLM_F_EXCL
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     /* Nothing.             */
090: #define NLMSG_ERROR             0x2     /* Error                */
091: #define NLMSG_DONE              0x3     /* End of a dump        */
092: #define NLMSG_OVERRUN           0x4     /* Data lost            */
093: 
094: #define NLMSG_MIN_TYPE          0x10    /* < 0x10: reserved control messages */
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            /* Major 36 is reserved for networking                                          */
112: 
113: enum {
114:         NETLINK_UNCONNECTED = 0,
115:         NETLINK_CONNECTED,
116: };
117: 
118: /*
119:  *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
120:  * +---------------------+- - -+- - - - - - - - - -+- - -+
121:  * |        Header       | Pad |     Payload       | Pad |
122:  * |   (struct nlattr)   | ing |                   | ing |
123:  * +---------------------+- - -+- - - - - - - - - -+- - -+
124:  *  <-------------- nlattr->nla_len -------------->
125:  */
126: 
127: struct nlattr {
128:         __u16           nla_len;
129:         __u16           nla_type;
130: };
131: 
132: /*
133:  * nla_type (16 bits)
134:  * +---+---+-------------------------------+
135:  * | N | O | Attribute Type                |
136:  * +---+---+-------------------------------+
137:  * N := Carries nested attributes
138:  * O := Payload stored in network byte order
139:  *
140:  * Note: The N and O flag are mutually exclusive.
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  /* __LINUX_NETLINK_H */
152: 


for client 3.145.191.22
© Andrew Scott 2006 - 2024,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/