144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __LINUX_NETLINK_H 244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define __LINUX_NETLINK_H 344d362409d5469aed47d19e7908d19bd194493aThomas Graf 444d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 544d362409d5469aed47d19e7908d19bd194493aThomas Graf * Netlink socket address 644d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup nl 744d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct sockaddr_nl 944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf /** socket family (AF_NETLINK) */ 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf sa_family_t nl_family; 1244d362409d5469aed47d19e7908d19bd194493aThomas Graf 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf /** Padding (unused) */ 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned short nl_pad; 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf /** Unique process ID */ 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nl_pid; 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf /** Multicast group subscriptions */ 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nl_groups; 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Netlink message header 2544d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup msg 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 2744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nlmsghdr 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Length of message including header. 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nlmsg_len; 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 3544d362409d5469aed47d19e7908d19bd194493aThomas Graf * Message type (content type) 3644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t nlmsg_type; 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Message flags 4144d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t nlmsg_flags; 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf * Sequence number 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nlmsg_seq; 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Netlink PID of the proccess sending the message. 5144d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nlmsg_pid; 5344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 5644d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Standard message flags 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{ 5844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 5944d362409d5469aed47d19e7908d19bd194493aThomas Graf 6044d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 6144d362409d5469aed47d19e7908d19bd194493aThomas Graf * Must be set on all request messages (typically from user space to 6244d362409d5469aed47d19e7908d19bd194493aThomas Graf * kernel space). 6344d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup msg 6444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 6544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_REQUEST 1 6644d362409d5469aed47d19e7908d19bd194493aThomas Graf 6744d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 6844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Indicates the message is part of a multipart message terminated 6944d362409d5469aed47d19e7908d19bd194493aThomas Graf * by NLMSG_DONE. 7044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 7144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_MULTI 2 7244d362409d5469aed47d19e7908d19bd194493aThomas Graf 7344d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 7444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Request for an acknowledgment on success. 7544d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 7644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_ACK 4 7744d362409d5469aed47d19e7908d19bd194493aThomas Graf 7844d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 7944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Echo this request 8044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 8144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_ECHO 8 8244d362409d5469aed47d19e7908d19bd194493aThomas Graf 8344d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 8444d362409d5469aed47d19e7908d19bd194493aThomas Graf 8544d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 8644d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Additional message flags for GET requests 8744d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{ 8844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 8944d362409d5469aed47d19e7908d19bd194493aThomas Graf 9044d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 9144d362409d5469aed47d19e7908d19bd194493aThomas Graf * Return the complete table instead of a single entry. 9244d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup msg 9344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 9444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_ROOT 0x100 9544d362409d5469aed47d19e7908d19bd194493aThomas Graf 9644d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 9744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Return all entries matching criteria passed in message content. 9844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 9944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_MATCH 0x200 10044d362409d5469aed47d19e7908d19bd194493aThomas Graf 10144d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 10244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Return an atomic snapshot of the table being referenced. This 10344d362409d5469aed47d19e7908d19bd194493aThomas Graf * may require special privileges because it has the potential to 10444d362409d5469aed47d19e7908d19bd194493aThomas Graf * interrupt service in the FE for a longer time. 10544d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 10644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_ATOMIC 0x400 10744d362409d5469aed47d19e7908d19bd194493aThomas Graf 10844d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 10944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Dump all entries 11044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 11144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH) 11244d362409d5469aed47d19e7908d19bd194493aThomas Graf 11344d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 11444d362409d5469aed47d19e7908d19bd194493aThomas Graf 11544d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 11644d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Additional messsage flags for NEW requests 11744d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{ 11844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 11944d362409d5469aed47d19e7908d19bd194493aThomas Graf 12044d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 12144d362409d5469aed47d19e7908d19bd194493aThomas Graf * Replace existing matching config object with this request. 12244d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup msg 12344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 12444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_REPLACE 0x100 12544d362409d5469aed47d19e7908d19bd194493aThomas Graf 12644d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 12744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Don't replace the config object if it already exists. 12844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 12944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_EXCL 0x200 13044d362409d5469aed47d19e7908d19bd194493aThomas Graf 13144d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 13244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Create config object if it doesn't already exist. 13344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 13444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_CREATE 0x400 13544d362409d5469aed47d19e7908d19bd194493aThomas Graf 13644d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 13744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Add to the end of the object list. 13844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 13944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLM_F_APPEND 0x800 14044d362409d5469aed47d19e7908d19bd194493aThomas Graf 14144d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 14244d362409d5469aed47d19e7908d19bd194493aThomas Graf 14344d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 14444d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Standard Message types 14544d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{ 14644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 14744d362409d5469aed47d19e7908d19bd194493aThomas Graf 14844d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 14944d362409d5469aed47d19e7908d19bd194493aThomas Graf * No operation, message must be ignored 15044d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup msg 15144d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 15244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLMSG_NOOP 0x1 15344d362409d5469aed47d19e7908d19bd194493aThomas Graf 15444d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 15544d362409d5469aed47d19e7908d19bd194493aThomas Graf * The message signals an error and the payload contains a nlmsgerr 15644d362409d5469aed47d19e7908d19bd194493aThomas Graf * structure. This can be looked at as a NACK and typically it is 15744d362409d5469aed47d19e7908d19bd194493aThomas Graf * from FEC to CPC. 15844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 15944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLMSG_ERROR 0x2 16044d362409d5469aed47d19e7908d19bd194493aThomas Graf 16144d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 16244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Message terminates a multipart message. 16344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 16444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLMSG_DONE 0x3 16544d362409d5469aed47d19e7908d19bd194493aThomas Graf 16644d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 16744d362409d5469aed47d19e7908d19bd194493aThomas Graf * The message signals that data got lost 16844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 16944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLMSG_OVERRUN 0x4 17044d362409d5469aed47d19e7908d19bd194493aThomas Graf 17144d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 17244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Lower limit of reserved message types 17344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 17444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLMSG_MIN_TYPE 0x10 17544d362409d5469aed47d19e7908d19bd194493aThomas Graf 17644d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 17744d362409d5469aed47d19e7908d19bd194493aThomas Graf 17844d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 17944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Netlink error message 18044d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup msg 18144d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 18244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nlmsgerr 18344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 18444d362409d5469aed47d19e7908d19bd194493aThomas Graf /** Error code (errno number) */ 18544d362409d5469aed47d19e7908d19bd194493aThomas Graf int error; 18644d362409d5469aed47d19e7908d19bd194493aThomas Graf 18744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** Original netlink message causing the error */ 18844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nlmsghdr msg; 18944d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 19044d362409d5469aed47d19e7908d19bd194493aThomas Graf 19144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_pktinfo 19244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 19344d362409d5469aed47d19e7908d19bd194493aThomas Graf __u32 group; 19444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 19544d362409d5469aed47d19e7908d19bd194493aThomas Graf 19644d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif /* __LINUX_NETLINK_H */ 197