if_util
— system
networking interface utility routines
PDEL Library (libpdel, -lpdel)
#include
<sys/types.h>
#include <netinet/in.h>
#include
<pdel/net/if_util.h>
int
if_get_list
(char
***listp, const char
*mtype);
int
if_get_type
(const
char *ifname);
int
if_get_flags
(const
char *ifname);
int
if_set_flags
(const
char *ifname, int
flags);
int
if_get_mtu
(const
char *ifname);
int
if_set_mtu
(const
char *ifname, u_int
mtu);
int
if_get_link_addr
(const
char *ifname, struct
sockaddr_dl **sdlp, const
char *mtype);
int
if_get_ip_addrs
(const
char *ifname, struct
in_addr **iplistp, struct
in_addr **nmlistp, const
char *mtype);
int
if_get_ip_addr
(const
char *ifname, struct
in_addr *ipp, struct
in_addr *nmp);
int
if_add_ip_addr
(const
char *iface, struct
in_addr ip, struct
in_addr mask, struct
in_addr dest);
int
if_del_ip_addr
(const
char *iface, struct
in_addr ip, struct
in_addr mask, struct
in_addr dest);
int
if_get_arp
(struct
in_addr ip, u_char
*ether);
int
if_set_arp
(struct
in_addr ip, const u_char
*ether, int temp,
int publish);
int
if_flush_arp
(void);
These functions are useful for accessing and configuring system
networking interfaces, especially for IP networking.
if_get_list
()
constructs a list of the names of all interfaces present in the system. Zero
or more strings are allocated and pointed to by the elements of a newly
allocated array of pointers. The length of the array is returned by
if_get_list
() and a pointer to the array is stored
in *listp. Each string, as well as the array itself,
is allocated with
typed_mem(3)
type mtype. The caller is responsible for eventually
freeing the individual strings as well as the array itself.
if_get_type
()
returns the type of the interface named ifname. The
interface types are defined in the include file
<net/if_types.h>
.
if_get_flags
()
gets the flags associated with the interface named
ifname. The interface flags are defined in the include
file <net/if.h>
.
if_set_flags
()
attempts to set the flags associated with the interface named
ifname.
if_get_mtu
()
returns the current MTU associated with the interface named
ifname.
if_set_mtu
()
attempts to set the MTU associated with the interface named
ifname.
if_get_link_addr
()
retrieves the link layer address associated with the interface named
ifname, allocates a buffer with
typed_mem(3)
type mtype to hold it, and stores a pointer to the
buffer in *sdlp. The caller is responsible for
eventually freeing the buffer. The struct
sockaddr_dl
type is defined in the include file
<net/if_dl.h>
.
if_get_ip_addrs
()
retrieves the list of all IP addresses (with netmasks) configured on the
interface named ifname. The IP addresses and netmasks
are stored in two arrays allocated with
typed_mem(3)
type mtype, and pointers to these arrays are stored in
*iplistp and *nmlistp,
respectively. The caller is responsible for eventually freeing the arrays.
The length of the arrays is returned.
if_get_ip_addr
()
retrieves the first IP address and netmask configured on the interface named
ifname and stores them in *ipp
and *nmp, respectively.
if_add_ip_addr
()
configures a new IP address on the interface named
ifname, using the netmask mask
and destination dest. Existing IP addresses configured
on the interface are not removed. dest should be
0.0.0.0 for non-point-to-point interfaces.
if_del_ip_addr
()
removes a configured IP address, netmask, and destination from the interface
named ifname. dest should be
0.0.0.0 for non-point-to-point interfaces.
if_get_arp
()
retrieves the ARP table entry associated with the IP address
ip and stores it in the buffer pointed to by
ether, which must be at least six bytes long.
if_set_arp
()
sets an ARP table entry for the IP address ip to
resolve to the Ethernet address pointed to by ether.
The temp flag indicates a temporary entry. The
publish flag indicates that the local machine should
proxy-ARP for this IP address. If ether is
NULL
, any matching ARP table entry is cleared.
The
if_flush_arp
()
clears the ARP table.
All of the above functions return -1 to indicate an error, with
errno set appropriately.
The PDEL library was developed at Packet Design, LLC.
http://www.packetdesign.com/
Archie Cobbs
⟨archie@freebsd.org⟩
There is no way to retrieve destination addresses configured on a
point-to-point interface.
These routines should be less IPv4-centric.