将用到以下結構和函數:
在net/route.h中:
struct rtentry
{
......
struct sockaddr rt_dst;
struct sockaddr rt_gateway;
struct sockaddr rt_genmask;
unsigned short int rt_flags;
......
};
`函數聲明:
int set_gateway ( const char * gateway )
`代碼:
struct rtentry rt;
struct sockaddr_in sin;
int skfd = -1;
memset ( &rt, 0, sizeof ( struct rtentry ));
memset ( &sin, 0, sizeof ( struct sockaddr_in ));
sin.sin_family = AF_INET;
sin.sin_port = 0;
if ( inet_aton ( gateway, &sin.sin_addr ) < 0 )
{
printf ( "inet_aton error\n" );
return -1;
}
memcpy ( &rt.rt_gateway, &sin, sizeof ( sockaddr_in ));
(( struct sockaddr_in * ) &rt.rt_dst )->sin_family = AF_INET;
(( struct sockaddr_in * ) &rt.rt_genmask )->sin_family = AF_INET;
rt.rt_flags = RTF_GATEWAY;
skfd = socket ( AF_INET, SOCK_DGRAM, 0 );
if ( skfd < 0 )
{
printf ( "socket error\n" );
return -1;
}
if ( ioctl ( skfd, SIOCADDRT, &rt ) < 0 )
{
printf ( "ioctl error\n" );
close ( skfd );
return -1;
}
close ( skfd );
return 0;