Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef89e8d1 authored by Elliott Hughes's avatar Elliott Hughes Committed by Gerrit Code Review
Browse files

Merge "Revert "Remove netcfg's unused options.""

parents 67900498 ca77255c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1348,7 +1348,7 @@ int adb_main(int is_daemon, int server_port)
    ** AID_ADB to access the USB driver
    ** AID_LOG to read system logs (adb logcat)
    ** AID_INPUT to diagnose input issues (getevent)
    ** AID_INET to diagnose network issues (ping)
    ** AID_INET to diagnose network issues (netcfg, ping)
    ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump)
    ** AID_SDCARD_R to allow reading from the SD card
    ** AID_SDCARD_RW to allow writing to the SD card
+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ extern int ifc_set_hwaddr(const char *name, const void *ptr);
extern int ifc_clear_addresses(const char *name);

extern int ifc_create_default_route(const char *name, in_addr_t addr);
extern int ifc_remove_default_route(const char *ifname);
extern int ifc_get_info(const char *name, in_addr_t *addr, int *prefixLength,
                        unsigned *flags);

+7 −7
Original line number Diff line number Diff line
@@ -353,28 +353,28 @@ static int send_message(int sock, int if_index, dhcp_msg *msg, int size)
static int is_valid_reply(dhcp_msg *msg, dhcp_msg *reply, int sz)
{
    if (sz < DHCP_MSG_FIXED_SIZE) {
        if (verbose) ALOGD("dhcp: Wrong size %d != %d\n", sz, DHCP_MSG_FIXED_SIZE);
        if (verbose) ALOGD("netcfg: Wrong size %d != %d\n", sz, DHCP_MSG_FIXED_SIZE);
        return 0;
    }
    if (reply->op != OP_BOOTREPLY) {
        if (verbose) ALOGD("dhcp: Wrong Op %d != %d\n", reply->op, OP_BOOTREPLY);
        if (verbose) ALOGD("netcfg: Wrong Op %d != %d\n", reply->op, OP_BOOTREPLY);
        return 0;
    }
    if (reply->xid != msg->xid) {
        if (verbose) ALOGD("dhcp: Wrong Xid 0x%x != 0x%x\n", ntohl(reply->xid),
        if (verbose) ALOGD("netcfg: Wrong Xid 0x%x != 0x%x\n", ntohl(reply->xid),
                          ntohl(msg->xid));
        return 0;
    }
    if (reply->htype != msg->htype) {
        if (verbose) ALOGD("dhcp: Wrong Htype %d != %d\n", reply->htype, msg->htype);
        if (verbose) ALOGD("netcfg: Wrong Htype %d != %d\n", reply->htype, msg->htype);
        return 0;
    }
    if (reply->hlen != msg->hlen) {
        if (verbose) ALOGD("dhcp: Wrong Hlen %d != %d\n", reply->hlen, msg->hlen);
        if (verbose) ALOGD("netcfg: Wrong Hlen %d != %d\n", reply->hlen, msg->hlen);
        return 0;
    }
    if (memcmp(msg->chaddr, reply->chaddr, msg->hlen)) {
        if (verbose) ALOGD("dhcp: Wrong chaddr %x != %x\n", *(reply->chaddr),*(msg->chaddr));
        if (verbose) ALOGD("netcfg: Wrong chaddr %x != %x\n", *(reply->chaddr),*(msg->chaddr));
        return 0;
    }
    return 1;
+20 −0
Original line number Diff line number Diff line
@@ -639,6 +639,26 @@ int ifc_reset_connections(const char *ifname, const int reset_mask)
#endif
}

/*
 * Removes the default route for the named interface.
 */
int ifc_remove_default_route(const char *ifname)
{
    struct rtentry rt;
    int result;

    ifc_init();
    memset(&rt, 0, sizeof(rt));
    rt.rt_dev = (void *)ifname;
    rt.rt_flags = RTF_UP|RTF_GATEWAY;
    init_sockaddr_in(&rt.rt_dst, 0);
    if ((result = ioctl(ifc_ctl_sock, SIOCDELRT, &rt)) < 0) {
        ALOGD("failed to remove default route for %s: %s", ifname, strerror(errno));
    }
    ifc_close();
    return result;
}

int
ifc_configure(const char *ifname,
        in_addr_t address,
+87 −18
Original line number Diff line number Diff line
@@ -24,7 +24,13 @@
#include <stdlib.h>
#include <string.h>

static const char *ipaddr(in_addr_t addr)
void die(const char *reason)
{
    perror(reason);
    exit(1);
}

const char *ipaddr(in_addr_t addr)
{
    struct in_addr in_addr;

@@ -32,13 +38,13 @@ static const char *ipaddr(in_addr_t addr)
    return inet_ntoa(in_addr);
}

static void usage(void)
void usage(void)
{
    fprintf(stderr,"usage: netcfg [<interface> dhcp]\n");
    fprintf(stderr,"usage: netcfg [<interface> {dhcp|up|down}]\n");
    exit(1);
}

static int dump_interface(const char *name)
int dump_interface(const char *name)
{
    unsigned addr, flags;
    unsigned char hwbuf[ETH_ALEN];
@@ -63,7 +69,7 @@ static int dump_interface(const char *name)
    return 0;
}

static int dump_interfaces(void)
int dump_interfaces(void)
{
    DIR *d;
    struct dirent *de;
@@ -79,11 +85,56 @@ static int dump_interfaces(void)
    return 0;
}

int set_hwaddr(const char *name, const char *asc) {
    struct ether_addr *addr = ether_aton(asc);
    if (!addr) {
        printf("Failed to parse '%s'\n", asc);
        return -1;
    }
    return ifc_set_hwaddr(name, addr->ether_addr_octet);
}

struct 
{
    const char *name;
    int nargs;
    void *func;
} CMDS[] = {
    { "dhcp",   1, do_dhcp },
    { "up",     1, ifc_up },
    { "down",   1, ifc_down },
    { "deldefault", 1, ifc_remove_default_route },
    { "hwaddr", 2, set_hwaddr },
    { 0, 0, 0 },
};

static int call_func(void *_func, unsigned nargs, char **args)
{
    switch(nargs){
    case 1: {
        int (*func)(char *a0) = _func;
        return func(args[0]);
    }
    case 2: {
        int (*func)(char *a0, char *a1) = _func;
        return func(args[0], args[1]);
    }
    case 3: {
        int (*func)(char *a0, char *a1, char *a2) = _func;
        return func(args[0], args[1], args[2]);
    }
    default:
        return -1;
    }
}

int main(int argc, char **argv)
{
    char *iname;
    int n;
    
    if(ifc_init()) {
        perror("Cannot perform requested operation");
        exit(1);
        die("Cannot perform requested operation");
    }

    if(argc == 1) {
@@ -92,23 +143,41 @@ int main(int argc, char **argv)
        return result;
    }

    if(argc != 3) usage();
    if(argc < 3) usage();

    char* iname = argv[1];
    char* action = argv[2];
    iname = argv[1];
    if(strlen(iname) > 16) usage();

    if (!strcmp(action, "dhcp")) {
        if (do_dhcp(iname)) {
            fprintf(stderr, "dhcp failed: %s\n", strerror(errno));
    argc -= 2;
    argv += 2;
    while(argc > 0) {
        for(n = 0; CMDS[n].name; n++){
            if(!strcmp(argv[0], CMDS[n].name)) {
                char *cmdname = argv[0];
                int nargs = CMDS[n].nargs;
                
                argv[0] = iname;
                if(argc < nargs) {
                    fprintf(stderr, "not enough arguments for '%s'\n", cmdname);
                    ifc_close();
                    exit(1);
                }
    } else {
        fprintf(stderr,"no such action '%s'\n", action);
                if(call_func(CMDS[n].func, nargs, argv)) {
                    fprintf(stderr, "action '%s' failed (%s)\n", cmdname, strerror(errno));
                    ifc_close();
                    exit(1);
                }
                argc -= nargs;
                argv += nargs;
                goto done;
            }
        }
        fprintf(stderr,"no such action '%s'\n", argv[0]);
        usage();
    done:
        ;
    }

    ifc_close();

    return 0;
}