# Include <sys/types. h> <br/> # include <sys/socket. h> <br/> # include <netinet/in. h> <br/> # include <net/if. h> <br/> # include <sys/IOCTL. h> <br/> # include <errno. h> <br/> # include <string. h> <br/> # include <net/route. h> <br/> # include <unistd. h> <br/> # include <stdio. h> </P> <p> int set_gateway (unsigned long GW) <br/>{< br/> int skfd; <br/> struct rtentry RT; <br/> int err; </P> <p> skfd = socket (pf_inet, sock_d Gram, 0); <br/> If (skfd <0) <br/> return-1; </P> <p>/* Delete existing defalt gateway */<br/> memset (& RT, 0, sizeof (RT )); </P> <p> RT. rt_dst.sa_family = af_inet; <br/> (struct sockaddr_in *) & RT. rt_dst)-> sin_addr.s_addr = 0; </P> <p> RT. rt_genmask.sa_family = af_inet; <br/> (struct sockaddr_in *) & RT. rt_genmask)-> sin_addr.s_addr = 0; </P> <p> RT. rt_flags = rtf_up; </P> <p> err = IOCTL (skfd, siocde LRT, & RT); </P> <p> If (ERR = 0 | errno = esrch) & GW) {<br/>/* Set Default Gateway */<br/> memset (& RT, 0, sizeof (RT); </P> <p> RT. rt_dst.sa_family = af_inet; <br/> (struct sockaddr_in *) & RT. rt_dst)-> sin_addr.s_addr = 0; </P> <p> RT. rt_gateway.sa_family = af_inet; <br/> (struct sockaddr_in *) & RT. rt_gateway)-> sin_addr.s_addr = GW; </P> <p> RT. rt_genmask.sa_family = af_inet; <br/> (struct so Ckaddr_in *) & RT. rt_genmask)-> sin_addr.s_addr = 0; </P> <p> RT. rt_flags = rtf_up | rtf_gateway; </P> <p> err = IOCTL (skfd, siocaddrt, & RT ); <br/>}</P> <p> close (skfd); </P> <p> return err; <br/>}</P> <p> int get_gateway (unsigned long * P) <br/>{< br/> file * FP; <br/> char Buf [256]; // 128 is enough for Linux <br/> char iface [16]; <br/> unsigned long dest_addr, gate_addr; <br/> * P = inaddr_none; <br/> Fp = fopen ("/proc/NET/route", "R"); <br/> If (FP = NULL) <br/> return-1; <br/>/* Skip title line */<br/> fgets (BUF, sizeof (BUF), FP); <br/> while (fgets (BUF, sizeof (BUF), FP) {<br/> If (sscanf (BUF, "% S/T % LX/T % lx", iface, & dest_addr, & gate_addr )! = 3 | <br/> dest_addr! = 0) <br/> continue; <br/> * P = gate_addr; <br/> break; <br/>}</P> <p> fclose (FP); <br/> return 0; <br/>}</P> <p>