Hi,

On 17/3/19 13:38, aitor_czr wrote:

Hi Eward,

On 7/3/19 8:38, Edward Bartolo <edb...@gmail.com> via Dng wrote:
Hi Everyone,

My version of simple-netaid-backend has been debugged to connect when
there is only one active wifi hotspot. It was previously failing to
connect because there was an error in a while loop which prevented
iteration from taking place when there was only one active wifi
hotspot.

Please, note my graphical frontend does not use unnecessary cosmetics
to make it look appealing to the eyes. My aim was simplicity and low
use of system processing and memory.  Moreover, the backend
establishes a connection using low level calls to avoid using
ifupdown. It uses instead ifconfig, iwconfig, wpa_supplicant and
dhclient.
I'm working again on simple-netaid, and i 'd like to share with you the C code

for bringing up/down a concrete network interface (void interface_up/down, respectivelly):



/********         Bring up the interface                      *******/

void interface_up (const char *if_name)

{
    struct ifreq ifr;
    int skfd = 0;

    strncpy(ifr.ifr_name, if_name, IFNAMSIZ);

    /* Create a channel to the NET kernel. */
    if((skfd = iw_sockets_open()) < 0)
    {
        perror("socket");
        return -1;
    }

    skfd = socket (AF_INET, SOCK_DGRAM, 0);
    if (skfd && ioctl(skfd, SIOCGIFFLAGS, &ifr) >= 0) {
        printf("Activating interface %s", if_name);
        strncpy(ifr.ifr_name, if_name, IFNAMSIZ);
        ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);
        ioctl(skfd, SIOCSIFFLAGS, &ifr);
    } else {
        printf("Getting flags for interface %s failed, not activating interface.", if_name);
    }

    /* Close the socket. */
    iw_sockets_close(skfd);

}


/********         Bring down the interface                      *******/

void interface_down (const char *if_name)
{
    struct ifreq ifr;
    int skfd = 0;

    strncpy(ifr.ifr_name, if_name, IFNAMSIZ);

    /* Create a channel to the NET kernel. */
    if((skfd = iw_sockets_open()) < 0)
    {
        perror("socket");
        return -1;
    }

    if (skfd && ioctl(skfd, SIOCGIFFLAGS, &ifr) >= 0) {
        printf("Taking down interface %s", if_name);
        strncpy(ifr.ifr_name, if_name, IFNAMSIZ);
        ifr.ifr_flags &= ~IFF_UP;
        ioctl(skfd, SIOCSIFFLAGS, &ifr);
    } else {
        printf("Getting flags for interface %s failed, not taking down interface.", if_name);
    }

    /* Close the socket. */
    iw_sockets_close(skfd);
}

HTH,

Aitor.

I took the code from debian-installer, more concretly from the netcfg udeb package.

Aitor.


_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to