Пример #1
0
void getStatusValue(char *type, char *retvalue)
{
  if (!safe_strcmp(type, "ethmac")) 
  {
    getMacByIntf("eth0", retvalue);    
  }
  else if (!safe_strcmp(type, "wlan0"))
  {
  	getMacByIntf("wlan0-va0", retvalue);
  } 
  else if (!safe_strcmp(type, "wlan1"))
  {
  	getMacByIntf("wlan1-va0", retvalue);
  }  
  else if (!safe_strcmp(type, "mocamac")) 
  {
  	getMacByIntf("eth0", retvalue);
  }
  else if (!safe_strcmp(type, "version"))
  {
  	strcpy(retvalue, "10.1.1");
  }
  else if (!safe_strcmp(type, "ipv6addr"))
  {
	 getIPv6Addr("br0", retvalue);
  }
  
  kinfo("%s -> %s", type, retvalue);
}
Пример #2
0
/**
 * virSocketCheckNetmask:
 * @addr1: a first network address
 * @addr2: a second network address
 * @netmask: the netmask address
 *
 * Check that @addr1 and @addr2 pertain to the same @netmask address
 * range and returns the size of the range
 *
 * Returns 1 in case of success and 0 in case of failure and
 *         -1 in case of error
 */
int virSocketCheckNetmask(virSocketAddrPtr addr1, virSocketAddrPtr addr2,
                          virSocketAddrPtr netmask) {
    int i;

    if ((addr1 == NULL) || (addr2 == NULL) || (netmask == NULL))
        return(-1);
    if ((addr1->data.stor.ss_family != addr2->data.stor.ss_family) ||
        (addr1->data.stor.ss_family != netmask->data.stor.ss_family))
        return(-1);

    if (virSocketAddrIsNetmask(netmask) != 0)
        return(-1);

    if (addr1->data.stor.ss_family == AF_INET) {
        virIPv4Addr t1, t2, tm;

        if ((getIPv4Addr(addr1, &t1) < 0) ||
            (getIPv4Addr(addr2, &t2) < 0) ||
            (getIPv4Addr(netmask, &tm) < 0))
            return(-1);

        for (i = 0;i < 4;i++) {
            if ((t1[i] & tm[i]) != (t2[i] & tm[i]))
                return(0);
        }

    } else if (addr1->data.stor.ss_family == AF_INET6) {
        virIPv6Addr t1, t2, tm;

        if ((getIPv6Addr(addr1, &t1) < 0) ||
            (getIPv6Addr(addr2, &t2) < 0) ||
            (getIPv6Addr(netmask, &tm) < 0))
            return(-1);

        for (i = 0;i < 8;i++) {
            if ((t1[i] & tm[i]) != (t2[i] & tm[i]))
                return(0);
        }

    } else {
        return(-1);
    }
    return(1);
}
Пример #3
0
/**
 * virSocketGetRange:
 * @start: start of an IP range
 * @end: end of an IP range
 *
 * Check the order of the 2 addresses and compute the range, this
 * will return 1 for identical addresses. Errors can come from incompatible
 * addresses type, excessive range (>= 2^^16) where the two addresses are
 * unrelated or inverted start and end.
 *
 * Returns the size of the range or -1 in case of failure
 */
int virSocketGetRange(virSocketAddrPtr start, virSocketAddrPtr end) {
    int ret = 0, i;

    if ((start == NULL) || (end == NULL))
        return(-1);
    if (start->data.stor.ss_family != end->data.stor.ss_family)
        return(-1);

    if (start->data.stor.ss_family == AF_INET) {
        virIPv4Addr t1, t2;

        if ((getIPv4Addr(start, &t1) < 0) ||
            (getIPv4Addr(end, &t2) < 0))
            return(-1);

        for (i = 0;i < 2;i++) {
            if (t1[i] != t2[i])
                return(-1);
        }
        ret = (t2[2] - t1[2]) * 256 + (t2[3] - t1[3]);
        if (ret < 0)
            return(-1);
        ret++;
    } else if (start->data.stor.ss_family == AF_INET6) {
        virIPv6Addr t1, t2;

        if ((getIPv6Addr(start, &t1) < 0) ||
            (getIPv6Addr(end, &t2) < 0))
            return(-1);

        for (i = 0;i < 7;i++) {
            if (t1[i] != t2[i])
                return(-1);
        }
        ret = t2[7] - t1[7];
        if (ret < 0)
            return(-1);
        ret++;
    } else {
        return(-1);
    }
    return(ret);
}
Пример #4
0
void   net_IP_data (int v, u_char *b, int len)
{

    int ip_version;
    int protocol = -1;


//  print_databytes (v, "IP_datagram_bytes", b, len);

    out_NL (v);
    out_nl (v,"IP_datagram_bytes:");

    indent (+1);

    ip_version = outBit_Sx_NL (v, "Version: ", b, 0, 4);

    if (ip_version == 4) {
        // -- RFC 791 IPv4

        int header_len;
        int ip;

        header_len = outBit_Sx_NL (v, "IP header length: ", b, 4, 4);
        outBit_Sx_NL (v, "Type of service: ", b, 8, 8);
        outBit_Sx_NL (v, "Total length: ", b, 16, 16);
        outBit_Sx_NL (v, "Identification: ", b, 32, 16);
        outBit_Sx_NL (v, "Reserved: ", b, 48, 1);
        outBit_Sx_NL (v, "DF: ", b, 49, 1);
        outBit_Sx_NL (v, "MF: ", b, 50, 1);
        outBit_Sx_NL (v, "Fragment offset: ", b, 51, 13);
        outBit_Sx_NL (v, "Time to live: ", b, 64, 8);
        protocol = outBit_S2x_NL(v, "Protocol: ", b, 72, 8,
                                 (char *(*)(u_long))netStr_RFC790_protocol_nr );

        outBit_Sx_NL (v, "Header checksum: ", b, 80, 16);

        ip = getBits (b, 0, 96, 32);
        out (v,"Source address: %08lx [= ", ip);
        displ_IPv4_addr (v, ip);
        out_nl (v,"]");

        ip = getBits (b, 0, 128, 32);
        out (v,"Destination address: %08lx [= ", ip);
        displ_IPv4_addr (v, ip);
        out_nl (v,"]");

        b   += (5*4);		// 5*4 = header length
        len -= (5*4);


        // -- IPv4 Options & Padding
        // ---  n = number of options
        // ---  Total bit length: ( ( 5+n ) * 32 ), 5 is minimum header

        if (header_len > 5) {
            // --  TODO Options & Padding
            print_databytes (v, "Options & Padding ", b, len);
            b   += (header_len-5)*4;
            len -= (header_len-5)*4;
        }


    } else if (ip_version == 6) {
        // -- RFC 2460 for IPv6
        struct IPv6ADDR x;

        outBit_Sx_NL (v, "Traffic class: ", b, 4, 8);
        outBit_Sx_NL (v, "Flow label: ", b, 12, 20);
        outBit_Sx_NL (v, "Payload length: ", b, 32, 16);
        protocol = outBit_Sx_NL (v, "Next header: ", b, 48, 16);
        outBit_Sx_NL (v, "Hop limit: ", b, 64, 16);

        getIPv6Addr (b+8, &x);
        out (v, "Source address: %08lx%08lx%08lx%08lx [= ",
             x.ip[0], x.ip[1], x.ip[2], x.ip[3] );
        displ_IPv6_addr (4, &x);
        out_nl (v,"]");

        getIPv6Addr (b+24, &x);
        out (v, "Destination address: %08lx%08lx%08lx%08lx [= ",
             x.ip[0], x.ip[1], x.ip[2], x.ip[3] );
        displ_IPv6_addr (4, &x);
        out_nl (v,"]");

        b   += 40;
        len -= 40;
    }


    // -- ICMP,  RFC 792
    if (protocol == 1) {
        out_NL (v);
        out_nl (v,"ICMP_data: ");

        indent (+1);

        print_databytes (v, "Data", b, len);	// $$$ TODO
        b   += len;
        len  = 0;

        indent (-1);
    }

    // -- TCP,  RFC 793
    if (protocol == 6) {
        out_NL (v);
        out_nl (v,"TCP_data: ");

        indent (+1);

        print_databytes (v, "Data", b, len);	// $$$ TODO
        b   += len;
        len  = 0;

        indent (-1);
    }

    // -- UDP datagram,  RFC 768
    if (protocol == 17) {
        int udp_header_len;

        out_NL (v);
        out_nl (v,"UDP_datagram: ");

        indent (+1);

        outBit_Sx_NL (v, "Source port: ", b,  0, 16);
        outBit_Sx_NL (v, "Destination port: ",	b, 16, 16);
        udp_header_len = outBit_Sx_NL (v, "Length: ", b, 32, 16);
        outBit_Sx_NL (v, "Checksum: ",	b, 48, 16);

        print_databytes (v, "Data", b+8, udp_header_len-8);

        b   += udp_header_len;	// -- length is complete header + data
        len -= udp_header_len;

        indent (-1);
    }



    if (len > 0) {
        print_databytes (v, "Unknown Data / Padding", b, len);
        b   += len;
        len -= len;
    }

    out_NL (v);
    indent (-1);

}