- switch (subnet->type) {
- case SUBNET_MAC:
- result = snprintf(netstr, len, "%02x:%02x:%02x:%02x:%02x:%02x",
- subnet->net.mac.address.x[0],
- subnet->net.mac.address.x[1],
- subnet->net.mac.address.x[2],
- subnet->net.mac.address.x[3],
- subnet->net.mac.address.x[4],
- subnet->net.mac.address.x[5]);
- netstr += result;
- len -= result;
- break;
-
- case SUBNET_IPV4:
- result = snprintf(netstr, len, "%u.%u.%u.%u",
- subnet->net.ipv4.address.x[0],
- subnet->net.ipv4.address.x[1],
- subnet->net.ipv4.address.x[2],
- subnet->net.ipv4.address.x[3]);
- netstr += result;
- len -= result;
- prefixlength = subnet->net.ipv4.prefixlength;
- if (prefixlength == 32)
- prefixlength = -1;
- break;
-
- case SUBNET_IPV6: {
- /* Find the longest sequence of consecutive zeroes */
- int max_zero_length = 0;
- int max_zero_length_index = 0;
- int current_zero_length = 0;
- int current_zero_length_index = 0;
- for (int i = 0; i < 8; i++) {
- if (subnet->net.ipv6.address.x[i] != 0)
- current_zero_length = 0;
- else {
- if (current_zero_length == 0)
- current_zero_length_index = i;
- current_zero_length++;
- if (current_zero_length > max_zero_length) {
- max_zero_length = current_zero_length;
- max_zero_length_index = current_zero_length_index;
- }
- }
- }
-
- /* Print the address */
- for (int i = 0; i < 8;) {
- if (max_zero_length > 1 && max_zero_length_index == i) {
- /* Shorten the representation as per RFC 5952 */
- const char* const FORMATS[] = { "%.1s", "%.2s", "%.3s" };
- const char* const* format = &FORMATS[0];
- if (i == 0)
- format++;
- if (i + max_zero_length == 8)
- format++;
- result = snprintf(netstr, len, *format, ":::");
- i += max_zero_length;
- } else {
- result = snprintf(netstr, len, "%hx:", ntohs(subnet->net.ipv6.address.x[i]));
- i++;
- }
- netstr += result;
- len -= result;
- }
-
- /* Remove the trailing colon */
- netstr--;
- len++;
- *netstr = 0;
-
- prefixlength = subnet->net.ipv6.prefixlength;
- if (prefixlength == 128)
- prefixlength = -1;
- break;
+
+ switch(subnet->type) {
+ case SUBNET_MAC:
+ snprintf(netstr, len, "%02x:%02x:%02x:%02x:%02x:%02x",
+ subnet->net.mac.address.x[0],
+ subnet->net.mac.address.x[1],
+ subnet->net.mac.address.x[2],
+ subnet->net.mac.address.x[3],
+ subnet->net.mac.address.x[4],
+ subnet->net.mac.address.x[5]);
+ break;
+
+ case SUBNET_IPV4:
+ inet_ntop(AF_INET, &subnet->net.ipv4.address, netstr, len);
+ prefixlength = subnet->net.ipv4.prefixlength;
+
+ if(prefixlength == 32) {
+ prefixlength = -1;
+ }
+
+ break;
+
+ case SUBNET_IPV6: {
+ inet_ntop(AF_INET6, &subnet->net.ipv6.address, netstr, len);
+ prefixlength = subnet->net.ipv6.prefixlength;
+
+ if(prefixlength == 128) {
+ prefixlength = -1;