77 lines
1.4 KiB
C
77 lines
1.4 KiB
C
#pragma src "/sys/src/libip"
|
|
#pragma lib "libip.a"
|
|
|
|
enum
|
|
{
|
|
IPaddrlen= 16,
|
|
IPv4addrlen= 4,
|
|
IPv4off= 12,
|
|
IPllen= 4,
|
|
};
|
|
|
|
/*
|
|
* for reading /net/ipifc
|
|
*/
|
|
typedef struct Ipifc Ipifc;
|
|
typedef struct Ipifcs Ipifcs;
|
|
|
|
struct Ipifc
|
|
{
|
|
char dev[64];
|
|
uchar ip[IPaddrlen];
|
|
uchar mask[IPaddrlen];
|
|
uchar net[IPaddrlen]; /* ip & mask */
|
|
Ipifc *next;
|
|
};
|
|
|
|
struct Ipifcs
|
|
{
|
|
Ipifc *first;
|
|
Ipifc *last;
|
|
};
|
|
|
|
/*
|
|
* user level udp headers
|
|
*/
|
|
enum
|
|
{
|
|
Udphdrsize= 36, /* size of a Udphdr */
|
|
};
|
|
|
|
typedef struct Udphdr Udphdr;
|
|
struct Udphdr
|
|
{
|
|
uchar raddr[IPaddrlen]; /* remote address and port */
|
|
uchar laddr[IPaddrlen]; /* local address and port */
|
|
uchar rport[2];
|
|
uchar lport[2];
|
|
};
|
|
|
|
uchar* defmask(uchar*);
|
|
void maskip(uchar*, uchar*, uchar*);
|
|
int eipconv(va_list*, Fconv*);
|
|
ulong parseip(uchar*, char*);
|
|
ulong parseipmask(uchar*, char*);
|
|
int parseether(uchar*, char*);
|
|
int myipaddr(uchar*, char*);
|
|
int myetheraddr(uchar*, char*);
|
|
|
|
void readipifc(char*, Ipifcs*);
|
|
|
|
void hnputl(void*, uint);
|
|
void hnputs(void*, ushort);
|
|
uint nhgetl(void*);
|
|
ushort nhgets(void*);
|
|
|
|
#define ipcmp(x, y) memcmp(x, y, IPaddrlen)
|
|
#define ipmove(x, y) memmove(x, y, IPaddrlen)
|
|
|
|
extern uchar IPv4bcast[IPaddrlen];
|
|
extern uchar IPv4bcastobs[IPaddrlen];
|
|
extern uchar IPv4allsys[IPaddrlen];
|
|
extern uchar IPv4allrouter[IPaddrlen];
|
|
extern uchar IPnoaddr[IPaddrlen];
|
|
extern uchar v4prefix[IPaddrlen];
|
|
extern uchar IPallbits[IPaddrlen];
|
|
|
|
#define CLASS(p) ((*(uchar*)(p))>>6)
|