libnl  1.1
Routing Rules

Allocation/Freeing

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

Cache Management

struct nl_cache * rtnl_rule_alloc_cache_by_family (struct nl_handle *handle, int family)
 Build a rule cache including all rules of the specified family currently configured in the kernel. More...
 
struct nl_cache * rtnl_rule_alloc_cache (struct nl_handle *handle)
 Build a rule cache including all rules currently configured in the kernel. More...
 

Rule Addition

struct nl_msg * rtnl_rule_build_add_request (struct rtnl_rule *tmpl, int flags)
 Build netlink request message to add a new rule. More...
 
int rtnl_rule_add (struct nl_handle *handle, struct rtnl_rule *tmpl, int flags)
 Add a new rule. More...
 

Rule Deletion

struct nl_msg * rtnl_rule_build_delete_request (struct rtnl_rule *rule, int flags)
 Build a netlink request message to delete a rule. More...
 
int rtnl_rule_delete (struct nl_handle *handle, struct rtnl_rule *rule, int flags)
 Delete a rule. More...
 

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, realm_t realms)
 
realm_t rtnl_rule_get_realms (struct rtnl_rule *rule)
 

Detailed Description

Function Documentation

struct nl_cache* rtnl_rule_alloc_cache_by_family ( struct nl_handle *  handle,
int  family 
)
read
Parameters
handlenetlink handle
familyaddress family

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

Note
The caller is responsible for destroying and freeing the cache after using it. (nl_cache_destroy_and_free())
Returns
The new cache or NULL if an error occured.

Definition at line 449 of file rule.c.

References nl_cache_alloc(), and nl_cache_refill().

Referenced by rtnl_rule_alloc_cache().

451 {
452  struct nl_cache * cache;
453 
454  cache = nl_cache_alloc(&rtnl_rule_ops);
455  if (cache == NULL)
456  return NULL;
457 
458  /* XXX RULE_CACHE_FAMILY(cache) = family; */
459 
460  if (handle && nl_cache_refill(handle, cache) < 0) {
461  free(cache);
462  return NULL;
463  }
464 
465  return cache;
466 }
struct nl_cache* rtnl_rule_alloc_cache ( struct nl_handle *  handle)
read
Parameters
handlenetlink handle

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

Note
The caller is responsible for destroying and freeing the cache after using it. (nl_cache_destroy_and_free())
Returns
The new cache or NULL if an error occured.

Definition at line 479 of file rule.c.

References rtnl_rule_alloc_cache_by_family().

480 {
481  return rtnl_rule_alloc_cache_by_family(handle, AF_UNSPEC);
482 }
struct nl_msg* rtnl_rule_build_add_request ( struct rtnl_rule *  tmpl,
int  flags 
)
read
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 564 of file rule.c.

References NLM_F_CREATE.

Referenced by rtnl_rule_add().

565 {
566  return build_rule_msg(tmpl, RTM_NEWRULE, NLM_F_CREATE | flags);
567 }
int rtnl_rule_add ( struct nl_handle *  handle,
struct rtnl_rule *  tmpl,
int  flags 
)
Parameters
handlenetlink handle
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 581 of file rule.c.

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

582 {
583  int err;
584  struct nl_msg *msg;
585 
586  msg = rtnl_rule_build_add_request(tmpl, flags);
587  if (!msg)
588  return nl_errno(ENOMEM);
589 
590  err = nl_send_auto_complete(handle, msg);
591  if (err < 0)
592  return err;
593 
594  nlmsg_free(msg);
595  return nl_wait_for_ack(handle);
596 }
struct nl_msg* rtnl_rule_build_delete_request ( struct rtnl_rule *  rule,
int  flags 
)
read
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 618 of file rule.c.

Referenced by rtnl_rule_delete().

619 {
620  return build_rule_msg(rule, RTM_DELRULE, flags);
621 }
int rtnl_rule_delete ( struct nl_handle *  handle,
struct rtnl_rule *  rule,
int  flags 
)
Parameters
handlenetlink handle
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 635 of file rule.c.

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

637 {
638  int err;
639  struct nl_msg *msg;
640 
641  msg = rtnl_rule_build_delete_request(rule, flags);
642  if (!msg)
643  return nl_errno(ENOMEM);
644 
645  err = nl_send_auto_complete(handle, msg);
646  if (err < 0)
647  return err;
648 
649  nlmsg_free(msg);
650  return nl_wait_for_ack(handle);
651 }