Netfilter Netlink
[Netlink Families]

Modules

 Conntrack
 Log

Socket Creating



int nfnl_connect (struct nl_handle *handle)
 Create and connect netfilter netlink socket.

Sending



int nfnl_send_simple (struct nl_handle *handle, uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)
 Send trivial netfilter netlink message.

Message Parsing



uint8_t nfnlmsg_subsys (struct nlmsghdr *nlh)
 Get netfilter subsystem id from message.
uint8_t nfnlmsg_subtype (struct nlmsghdr *nlh)
 Get netfilter message type from message.
uint8_t nfnlmsg_family (struct nlmsghdr *nlh)
 Get netfilter family from message.
uint16_t nfnlmsg_res_id (struct nlmsghdr *nlh)
 Get netfilter resource id from message.

Message Building



struct nl_msg * nfnlmsg_alloc_simple (uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)
 Allocate a new netfilter netlink message.
int nfnlmsg_put (struct nl_msg *msg, uint32_t pid, uint32_t seq, uint8_t subsys_id, uint8_t type, int flags, uint8_t family, uint16_t res_id)
 Add netlink and netfilter netlink headers to netlink message.

Detailed Description

Message Format
  <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) --->
 +----------------------------+- - -+- - - - - - - - - - -+- - -+
 |           Header           | Pad |       Payload       | Pad |
 |      struct nlmsghdr       |     |                     |     |
 +----------------------------+- - -+- - - - - - - - - - -+- - -+
  <-------- NFNL_HDRLEN --------->
 +--------------------------+- - -+------------+
 | Netfilter Netlink Header | Pad | Attributes |
 |    struct nfgenmsg       |     |            |
 +--------------------------+- - -+------------+
 nfnlmsg_attrdata(nfg, hdrlen)-----^
1) Creating a new netfilter netlink message
 struct nl_msg *msg;

 // Create a new empty netlink message
 msg = nlmsg_alloc();

 // Append the netlink and netfilter netlink message header
 hdr = nfnlmsg_put(msg, PID, SEQ, SUBSYS, TYPE, NLM_F_ECHO,
                   FAMILY, RES_ID);

 // Append the attributes.
 nla_put_u32(msg, 1, 0x10);

 // Message is ready to be sent.
 nl_send_auto_complete(nl_handle, msg);

 // All done? Free the message.
 nlmsg_free(msg);
2) Sending of trivial messages
 // For trivial messages not requiring any subsys specific header or
 // attributes, nfnl_send_simple() may be used to send messages directly.
 nfnl_send_simple(nl_handle, SUBSYS, TYPE, 0, FAMILY, RES_ID);

Function Documentation

int nfnl_connect ( struct nl_handle *  handle  ) 
Parameters:
handle Netlink handle.

Creates a NETLINK_NETFILTER netlink socket, binds the socket and issues a connection attempt.

See also:
nl_connect()
Returns:
0 on success or a negative error code.

Definition at line 85 of file nfnl.c.

References nl_connect().

00086 {
00087         return nl_connect(handle, NETLINK_NETFILTER);
00088 }

int nfnl_send_simple ( struct nl_handle *  handle,
uint8_t  subsys_id,
uint8_t  type,
int  flags,
uint8_t  family,
uint16_t  res_id 
)
Parameters:
handle Netlink handle.
subsys_id nfnetlink subsystem
type nfnetlink message type
flags message flags
family nfnetlink address family
res_id nfnetlink resource id
Returns:
Newly allocated netlink message or NULL.

Definition at line 108 of file nfnl.c.

References nl_send_simple().

00110 {
00111         struct nfgenmsg hdr = {
00112                 .nfgen_family = family,
00113                 .version = NFNETLINK_V0,
00114                 .res_id = htons(res_id),
00115         };
00116 
00117         return nl_send_simple(handle, NFNLMSG_TYPE(subsys_id, type), flags,
00118                               &hdr, sizeof(hdr));
00119 }

uint8_t nfnlmsg_subsys ( struct nlmsghdr nlh  ) 
Parameters:
nlh netlink messsage header

Definition at line 132 of file nfnl.c.

References nlmsghdr::nlmsg_type.

00133 {
00134         return NFNL_SUBSYS_ID(nlh->nlmsg_type);
00135 }

uint8_t nfnlmsg_subtype ( struct nlmsghdr nlh  ) 
Parameters:
nlh netlink messsage header

Definition at line 141 of file nfnl.c.

References nlmsghdr::nlmsg_type.

00142 {
00143         return NFNL_MSG_TYPE(nlh->nlmsg_type);
00144 }

uint8_t nfnlmsg_family ( struct nlmsghdr nlh  ) 
Parameters:
nlh netlink messsage header

Definition at line 150 of file nfnl.c.

References nlmsg_data().

00151 {
00152         struct nfgenmsg *nfg = nlmsg_data(nlh);
00153 
00154         return nfg->nfgen_family;
00155 }

uint16_t nfnlmsg_res_id ( struct nlmsghdr nlh  ) 
Parameters:
nlh netlink messsage header

Definition at line 161 of file nfnl.c.

References nlmsg_data().

00162 {
00163         struct nfgenmsg *nfg = nlmsg_data(nlh);
00164 
00165         return ntohs(nfg->res_id);
00166 }

struct nl_msg* nfnlmsg_alloc_simple ( uint8_t  subsys_id,
uint8_t  type,
int  flags,
uint8_t  family,
uint16_t  res_id 
) [read]
Parameters:
subsys_id nfnetlink subsystem
type nfnetlink message type
flags message flags
family nfnetlink address family
res_id nfnetlink resource id
Returns:
Newly allocated netlink message or NULL.

Definition at line 201 of file nfnl.c.

References nlmsg_alloc_simple(), and nlmsg_free().

00203 {
00204         struct nl_msg *msg;
00205 
00206         msg = nlmsg_alloc_simple(NFNLMSG_TYPE(subsys_id, type), flags);
00207         if (msg == NULL)
00208                 return NULL;
00209 
00210         if (nfnlmsg_append(msg, family, res_id) < 0)
00211                 goto nla_put_failure;
00212 
00213         return msg;
00214 
00215 nla_put_failure:
00216         nlmsg_free(msg);
00217         return NULL;
00218 }

int nfnlmsg_put ( struct nl_msg *  msg,
uint32_t  pid,
uint32_t  seq,
uint8_t  subsys_id,
uint8_t  type,
int  flags,
uint8_t  family,
uint16_t  res_id 
)
Parameters:
msg netlink message
pid netlink process id
seq sequence number of message
subsys_id nfnetlink subsystem
type nfnetlink message type
flags message flags
family nfnetlink address family
res_id nfnetlink resource id

Definition at line 231 of file nfnl.c.

References nlmsg_put().

00234 {
00235         struct nlmsghdr *nlh;
00236 
00237         nlh = nlmsg_put(msg, pid, seq, NFNLMSG_TYPE(subsys_id, type), 0, flags);
00238         if (nlh == NULL)
00239                 return nl_get_errno();
00240 
00241         return nfnlmsg_append(msg, family, res_id);
00242 }


Generated on 30 Oct 2009 for libnl by  doxygen 1.6.1