如何使用ioctl在C中以编程方式添加路由?

如何使用ioctl在C中以编程方式添加路由?,c,linux,routing,ioctl,C,Linux,Routing,Ioctl,我想在路由表中添加一些路由。此命令在终端上完全有效: sudo ip ro add 10.0.0.6 via 192.168.30.1 如果我选中“ip路由”,我知道,该路由已添加。 我想用ioctl在C中实现相同的命令。我写了这个函数: void addRoute() { int fd = socket( PF_INET, SOCK_DGRAM, IPPROTO_IP); struct rtentry route; memset( &route, 0, s

我想在路由表中添加一些路由。此命令在终端上完全有效:

sudo ip ro add 10.0.0.6 via 192.168.30.1
如果我选中“ip路由”,我知道,该路由已添加。 我想用ioctl在C中实现相同的命令。我写了这个函数:

void addRoute()
{
    int fd = socket( PF_INET, SOCK_DGRAM,  IPPROTO_IP);

    struct rtentry route;
    memset( &route, 0, sizeof( route ) );

    struct sockaddr_in addr = (struct sockaddr_in )&route.rt_gateway;
    addr->sin_family = AF_INET;
    addr->sin_addr.s_addr = inet_addr( "10.0.0.6" );

    addr = (struct sockaddr_in*) &route.rt_dst;
    addr->sin_family = AF_INET;
    addr->sin_addr.s_addr = inet_addr( "192.168.30.1" );

    addr = (struct sockaddr_in*) &route.rt_genmask;
    addr->sin_family = AF_INET;
    addr->sin_addr.s_addr = INADDR_ANY;

    route.rt_flags = RTF_UP | RTF_HOST;
    route.rt_metric = 0;

    if (ioctl( fd, SIOCADDRT, &route ) < 0)
    {
        printf("ioctl failed and returned errno %s \n", strerror(errno));
    }
    close( fd );
}

int main()
{
    addRoute();
    return 0;
}

你能看一下我的密码吗?我忘记在我的功能中添加什么了?

您之前是否从其他帐户发布过?或者只是在同一个班还是别的什么?可能想比较笔记。@Shawn几乎肯定是同一个人,有两个帐户,因为这两个名字都是从左手的主行键中拼凑出来的。
    ioctl failed and returned errno Network is unreachable