#include <net.h>
#include <acess/sys.h>
+enum {
+ UDP_IOCTL_GETSETLPORT = 4,
+ UDP_IOCTL_GETSETRPORT,
+ UDP_IOCTL_GETSETRMASK,
+ UDP_IOCTL_SETRADDR,
+};
+
#define FILENAME_MAX 255
// --- Translation functions ---
static inline uint32_t htonl(uint32_t v)
// === CODE ===
int main(int argc, char *argv[])
{
- tInterface *ifaces = NULL, *i;
+ tInterface *ifaces = NULL;
if( argc > 2 ) {
fprintf(stderr, "Usage: %s <interface>\n", argv[0]);
Scan_Dir( &ifaces, "/Devices/ip/adapters" );
}
- for( i = ifaces; i; i = i->Next )
+ for( tInterface *i = ifaces; i; i = i->Next )
{
if( Start_Interface(i) < 0 ) {
return -1;
{
int maxfd;
fd_set fds;
- tInterface *p;
int64_t timeout = 1000;
maxfd = 0;
FD_ZERO(&fds);
- for( i = ifaces; i; i = i->Next )
+ for( tInterface *i = ifaces; i; i = i->Next )
{
FD_SET(i->SocketFD, &fds);
if(maxfd < i->SocketFD) maxfd = i->SocketFD;
_SysDebug("select() returned");
// Check for changes (with magic to allow inline deletion)
- for( p = (void*)&ifaces, i = ifaces; i; p=i,i = i->Next )
+ for( tInterface *p = (void*)&ifaces, *i = ifaces; i; p=i,i = i->Next )
{
if( FD_ISSET(i->SocketFD, &fds) )
{
fprintf(stderr, "ERROR: Unable to open '%s'\n", path);
return -1;
}
- tmp = 68; _SysIOCtl(fd, 4, &tmp); // Local port
- tmp = 67; _SysIOCtl(fd, 5, &tmp); // Remote port
- tmp = 0; _SysIOCtl(fd, 7, &tmp); // Remote addr mask bits - we don't care where the reply comes from
+ tmp = 68; _SysIOCtl(fd, UDP_IOCTL_GETSETLPORT, &tmp); // Local port
+ tmp = 67; _SysIOCtl(fd, UDP_IOCTL_GETSETRPORT, &tmp); // Remote port
+ tmp = 0; _SysIOCtl(fd, UDP_IOCTL_GETSETRMASK, &tmp); // Remote addr mask bits - don't care source
addr[0] = addr[1] = addr[2] = addr[3] = 255; // 255.255.255.255
- _SysIOCtl(fd, 8, addr); // Remote address
+ _SysIOCtl(fd, UDP_IOCTL_SETRADDR, addr); // Remote address
return 0;
}