libnl 2.0

Routing Rules

Routing Family

Allocation/Freeing

struct rtnl_rule * rtnl_rule_alloc (void)
void rtnl_rule_put (struct rtnl_rule *rule)

Cache Management

int rtnl_rule_alloc_cache (struct nl_sock *sock, int family, struct nl_cache **result)
 Build a rule cache including all rules currently configured in the kernel.

Rule Addition

int rtnl_rule_build_add_request (struct rtnl_rule *tmpl, int flags, struct nl_msg **result)
 Build netlink request message to add a new rule.
int rtnl_rule_add (struct nl_sock *sk, struct rtnl_rule *tmpl, int flags)
 Add a new rule.

Rule Deletion

int rtnl_rule_build_delete_request (struct rtnl_rule *rule, int flags, struct nl_msg **result)
 Build a netlink request message to delete a rule.
int rtnl_rule_delete (struct nl_sock *sk, struct rtnl_rule *rule, int flags)
 Delete a rule.

Attribute Modification

void rtnl_rule_set_family (struct rtnl_rule *rule, int family)
int rtnl_rule_get_family (struct rtnl_rule *rule)
void rtnl_rule_set_prio (struct rtnl_rule *rule, int prio)
int rtnl_rule_get_prio (struct rtnl_rule *rule)
void rtnl_rule_set_mark (struct rtnl_rule *rule, uint64_t mark)
uint64_t rtnl_rule_get_mark (struct rtnl_rule *rule)
void rtnl_rule_set_table (struct rtnl_rule *rule, int table)
int rtnl_rule_get_table (struct rtnl_rule *rule)
void rtnl_rule_set_dsfield (struct rtnl_rule *rule, int dsfield)
int rtnl_rule_get_dsfield (struct rtnl_rule *rule)
void rtnl_rule_set_src_len (struct rtnl_rule *rule, int len)
int rtnl_rule_get_src_len (struct rtnl_rule *rule)
void rtnl_rule_set_dst_len (struct rtnl_rule *rule, int len)
int rtnl_rule_get_dst_len (struct rtnl_rule *rule)
int rtnl_rule_set_src (struct rtnl_rule *rule, struct nl_addr *src)
struct nl_addr * rtnl_rule_get_src (struct rtnl_rule *rule)
int rtnl_rule_set_dst (struct rtnl_rule *rule, struct nl_addr *dst)
struct nl_addr * rtnl_rule_get_dst (struct rtnl_rule *rule)
int rtnl_rule_set_iif (struct rtnl_rule *rule, const char *dev)
char * rtnl_rule_get_iif (struct rtnl_rule *rule)
void rtnl_rule_set_action (struct rtnl_rule *rule, int type)
int rtnl_rule_get_action (struct rtnl_rule *rule)
void rtnl_rule_set_realms (struct rtnl_rule *rule, uint32_t realms)
uint32_t rtnl_rule_get_realms (struct rtnl_rule *rule)

Function Documentation

int rtnl_rule_alloc_cache ( struct nl_sock *  sock,
int  family,
struct nl_cache **  result 
)
Parameters:
skNetlink socket.
familyAddress family or AF_UNSPEC.
resultPointer to store resulting cache.

Allocates a new rule cache, initializes it properly and updates it to include all rules currently configured in the kernel.

Returns:
0 on success or a negative error code.

Definition at line 359 of file rule.c.

References nl_cache_alloc(), and nl_cache_refill().

int rtnl_rule_build_add_request ( struct rtnl_rule *  tmpl,
int  flags,
struct nl_msg **  result 
)
Parameters:
tmpltemplate with data of new rule
flagsadditional netlink message flags

Builds a new netlink message requesting a addition of a new rule. The netlink message header isn't fully equipped with all relevant fields and must thus be sent out via nl_send_auto_complete() or supplemented as needed. tmpl must contain the attributes of the new address set via rtnl_rule_set_* functions.

Returns:
The netlink message

Definition at line 461 of file rule.c.

References NLM_F_CREATE.

Referenced by rtnl_rule_add().

int rtnl_rule_add ( struct nl_sock *  sk,
struct rtnl_rule *  tmpl,
int  flags 
)
Parameters:
skNetlink socket.
tmpltemplate with requested changes
flagsadditional netlink message flags

Builds a netlink message by calling rtnl_rule_build_add_request(), sends the request to the kernel and waits for the next ACK to be received and thus blocks until the request has been fullfilled.

Returns:
0 on sucess or a negative error if an error occured.

Definition at line 480 of file rule.c.

References nl_send_auto_complete(), nlmsg_free(), and rtnl_rule_build_add_request().

int rtnl_rule_build_delete_request ( struct rtnl_rule *  rule,
int  flags,
struct nl_msg **  result 
)
Parameters:
rulerule to delete
flagsadditional netlink message flags

Builds a new netlink message requesting a deletion of a rule. The netlink message header isn't fully equipped with all relevant fields and must thus be sent out via nl_send_auto_complete() or supplemented as needed. rule must point to an existing address.

Returns:
The netlink message

Definition at line 516 of file rule.c.

Referenced by rtnl_rule_delete().

int rtnl_rule_delete ( struct nl_sock *  sk,
struct rtnl_rule *  rule,
int  flags 
)
Parameters:
skNetlink socket.
rulerule to delete
flagsadditional netlink message flags

Builds a netlink message by calling rtnl_rule_build_delete_request(), sends the request to the kernel and waits for the next ACK to be received and thus blocks until the request has been fullfilled.

Returns:
0 on sucess or a negative error if an error occured.

Definition at line 534 of file rule.c.

References nl_send_auto_complete(), nlmsg_free(), and rtnl_rule_build_delete_request().