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

Commit 0dd572a5 authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Android (Google) Code Review
Browse files

Merge "Kill IPv6 sockets as well as IPv4 sockets." into honeycomb-LTE

parents 9cbac1fc 6cf73ead
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -366,10 +366,12 @@ int ifc_disable(const char *ifname)
int ifc_reset_connections(const char *ifname)
{
#ifdef HAVE_ANDROID_OS
    int result;
    int result, success;
    in_addr_t myaddr;
    struct ifreq ifr;
    struct in6_ifreq ifr6;

    /* IPv4. Clear connections on the IP address. */
    ifc_init();
    ifc_get_info(ifname, &myaddr, NULL, NULL);
    ifc_init_ifr(ifname, &ifr);
@@ -377,6 +379,21 @@ int ifc_reset_connections(const char *ifname)
    result = ioctl(ifc_ctl_sock, SIOCKILLADDR,  &ifr);
    ifc_close();

    /*
     * IPv6. On Linux, when an interface goes down it loses all its IPv6
     * addresses, so we don't know which connections belonged to that interface
     * So we clear all unused IPv6 connections on the device by specifying an
     * empty IPv6 address.
     */
    ifc_init6();
    // This implicitly specifies an address of ::, i.e., kill all IPv6 sockets.
    memset(&ifr6, 0, sizeof(ifr6));
    success = ioctl(ifc_ctl_sock6, SIOCKILLADDR,  &ifr6);
    if (result == 0) {
        result = success;
    }
    ifc_close6();

    return result;
#else
    return 0;