How to find out if the eth0 mode is static or dhcp?

后端 未结 3 998
梦毁少年i
梦毁少年i 2020-12-20 19:51

I want to use a C program to get if the ip of the network interface is set manually or via dhcp.

I\'ve tried to use the following code and it has worked in Debian, b

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-20 20:09

    for OpenWRT you can get a such information with the following command:

    $uci get network.lan.proto
    

    so I take the program you put in your question and I change only the command used to get information:

    #include  
    int main(void) { FILE *fp; char buffer[80]; fp=popen("uci get network.lan.proto","r"); fgets(buffer, sizeof(buffer), fp); printf("%s", buffer); pclose(fp); }

    to see all network interfaces available in your OpenWRT you can use the following command:

    $uci show network
    

    You can avoid using calling linux command in your c by using the libuci. The libuci contains C function to execute uci commands without passing via popen ( popen is used to execute external command from shell).

    The libuci exist by default in the development environment of OpenWRT, not need to download it, no need to build it and no need to install it on your OpenWRT machine

    You can use libuci in this way

    #include 
    void main()
    {
        char path[]="network.lan.proto";
        char buffer[80];
        struct  uci_ptr ptr;
        struct  uci_context *c = uci_alloc_context();
    
        if(!c) return;
    
        if ((uci_lookup_ptr(c, &ptr, path, true) != UCI_OK) ||
            (ptr.o==NULL || ptr.o->v.string==NULL)) { 
            uci_free_context(c);
            return;
        }
    
        if(ptr.flags & UCI_LOOKUP_COMPLETE)
                strcpy(buffer, ptr.o->v.string);
    
        uci_free_context(c);
    
        printf("%s\n", buffer);
    }
    

    (Not tested)

    and when you compile your program you have to add the -luci in the compilation command gcc

提交回复
热议问题