Linux:如何设置C的默认路由?

fre*_*set 1 linux networking routing posix routes

如何从C程序设置(并替换现有的)默认网络路由?如果可能的话,我想在没有shell命令的情况下这样做(这是一个低内存嵌入式系统).您也可以在不指定网关IP地址的情况下设置默认路由吗?在我的应用程序中,我想将ppp0或eth0设置为默认路由,具体取决于电缆是否插入eth0.

谢谢,弗雷德

Ash*_*van 8

您可以进行IOCTL调用以从C程序设置默认路由.

void main()
{
   int sockfd;
   struct rtentry rt;

   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   if (sockfd == -1)
   {
      perror("socket creation failed\n");
      return;
   }

   struct sockaddr_in *sockinfo = (struct sockaddr_in *)&rt.rt_gateway;
   sockinfo->sin_family = AF_INET;
   sockinfo->sin_addr.s_addr = inet_addr("Your Address");

   sockinfo = (struct sockaddr_in *)&rt.rt_dst;
   sockinfo->sin_family = AF_INET;
   sockinfo->sin_addr.s_addr = INADDR_ANY;

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

   rt.rt_flags = RTF_UP | RTF_GATEWAY;
   rt.rt_dev = "eth0";

   if(ioctl(sockfd, SIOCADDRT, &rt) < 0 )
       perror("ioctl");

   return;
}
Run Code Online (Sandbox Code Playgroud)