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