blob: 26d076a2fc6c88abe44949cffab4053e6e5eb973 [file] [log] [blame]
#ifndef IPCONFIG_NETDEV_H
#define IPCONFIG_NETDEV_H
#include <sys/utsname.h>
#include <net/if.h>
#define BPLEN 256
#define FNLEN 128 /* from DHCP RFC 2131 */
struct netdev {
const char *name; /* Device name */
unsigned int ifindex; /* interface index */
unsigned int hwtype; /* ARPHRD_xxx */
unsigned int hwlen; /* HW address length */
uint8_t hwaddr[16]; /* HW address */
uint8_t hwbrd[16]; /* Broadcast HW address */
unsigned int mtu; /* Device mtu */
unsigned int caps; /* Capabilities */
time_t open_time;
struct { /* BOOTP/DHCP info */
int fd;
uint32_t xid;
uint32_t gateway; /* BOOTP/DHCP gateway */
} bootp;
struct { /* RARP information */
int fd;
} rarp;
uint32_t ip_addr; /* my address */
uint32_t ip_broadcast; /* broadcast address */
uint32_t ip_server; /* server address */
uint32_t ip_netmask; /* my subnet mask */
uint32_t ip_gateway; /* my gateway */
uint32_t ip_nameserver[2]; /* two nameservers */
uint32_t serverid; /* dhcp serverid */
char reqhostname[SYS_NMLN]; /* requested hostname */
char hostname[SYS_NMLN]; /* hostname */
char dnsdomainname[SYS_NMLN]; /* dns domain name */
char nisdomainname[SYS_NMLN]; /* nis domain name */
char bootpath[BPLEN]; /* boot path */
char filename[FNLEN]; /* filename */
struct netdev *next; /* next configured i/f */
};
extern struct netdev *ifaces;
/*
* Device capabilities
*/
#define CAP_BOOTP (1<<0)
#define CAP_DHCP (1<<1)
#define CAP_RARP (1<<2)
/*
* Device states
*/
#define DEVST_UP 0
#define DEVST_BOOTP 1
#define DEVST_DHCPDISC 2
#define DEVST_DHCPREQ 3
#define DEVST_COMPLETE 4
#define DEVST_ERROR 5
int netdev_getflags(struct netdev *dev, short *flags);
int netdev_setaddress(struct netdev *dev);
int netdev_setdefaultroute(struct netdev *dev);
int netdev_up(struct netdev *dev);
int netdev_down(struct netdev *dev);
int netdev_init_if(struct netdev *dev);
int netdev_setmtu(struct netdev *dev);
static inline int netdev_running(struct netdev *dev)
{
short flags;
int ret = netdev_getflags(dev, &flags);
return ret ? 0 : !!(flags & IFF_RUNNING);
}
#endif /* IPCONFIG_NETDEV_H */