#ifndef H_NET
#define H_NET
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#define MAX_DNS_SERVERS 3
#define PUMP_INTFINFO_HAS_IP (1 << 0)
#define PUMP_INTFINFO_HAS_NETMASK (1 << 1)
#define PUMP_INTFINFO_HAS_BROADCAST (1 << 2)
#define PUMP_INTFINFO_HAS_NETWORK (1 << 3)
#define PUMP_INTFINFO_HAS_DEVICE (1 << 4)
#define PUMP_INTFINFO_HAS_BOOTSERVER (1 << 5)
#define PUMP_INTFINFO_HAS_BOOTFILE (1 << 6)
#define PUMP_INTFINFO_HAS_LEASE (1 << 7)
#define PUMP_INTFINFO_HAS_REQLEASE (1 << 8)
#define PUMP_NETINFO_HAS_GATEWAY (1 << 20)
#define PUMP_NETINFO_HAS_HOSTNAME (1 << 21)
#define PUMP_NETINFO_HAS_DOMAIN (1 << 22)
#define PUMP_NETINFO_HAS_DNS (1 << 23)
#define PUMP_FLAG_NODAEMON (1 << 0)
#define PUMP_FLAG_NOCONFIG (1 << 1)
#define PUMP_FLAG_FORCEHNLOOKUP (1 << 2)
/* all of these in_addr things are in network byte order! */
struct pumpNetIntf {
char device[10];
int set;
struct in_addr ip, netmask, broadcast, network;
struct in_addr bootServer;
char * bootFile;
time_t leaseExpiration, renewAt;
int reqLease; /* in seconds */
char * hostname, * domain; /* dynamically allocated */
struct in_addr gateway;
struct in_addr dnsServers[MAX_DNS_SERVERS];
int numDns;
};
#define OVERRIDE_FLAG_NODNS (1 << 0)
struct pumpOverrideInfo {
struct pumpNetIntf intf;
char * searchPath;
int flags;
int numRetries;
int timeout;
};
void pumpInitOverride(struct pumpOverrideInfo * override);
char * pumpDhcpRun(char * device, int flags, int lease,
char * reqHostname, struct pumpNetIntf * intf,
struct pumpOverrideInfo * override);
char * pumpSetupInterface(struct pumpNetIntf * intf);
/* setup an interface for sending a broadcast -- uses all 0's address */
char * pumpPrepareInterface(struct pumpNetIntf * intf, int s);
char * pumpDisableInterface(char * device);
int pumpDhcpRenew(struct pumpNetIntf * intf);
int pumpDhcpRelease(struct pumpNetIntf * intf);
int pumpSetupDefaultGateway(struct in_addr * gw);
#define RESULT_OKAY 0
#define RESULT_FAILED 1
#define RESULT_UNKNOWNIFACE 2
#endif