Tipo de datos de dirección IP

Se trata de un tipo de datos abstracto y no se puede utilizar directamente con operadores unarios o binarios C estándar. Solo se admiten variables locales o globales de tipo ip_addr_t. Una variable de este tipo también se puede almacenar en una matriz asociada como una clave o como un valor.

Vue da soporte a las siguientes características y operaciones para las variables de tipo de dirección IP:

Declaración de la variable de dirección IP
ip_addr_t i1;                               // global variable of type ip_addr_t 
__auto ip_addr_t i2;                        // auto variable of type 
ip_addr_t i2 = __ip4hdr->src_addr;          // store source IP address in a local ip_addr_t variable. 
ip_aso[“src_ip_addr”] = __ip4hdr->src_addr; // store in an associative array.

Los calificadores signed, unsigned, register, static, thread y kernel no están soportados para las variables de tipo ip_addr_t.

Operación de asignación

El operador de asignación (=) permite asignar una variable de tipo ip_addr_t a otra variable de tipo ip_addr_t y también permite asignar una dirección IP o nombre de host constante a la variable de tipo ip_addr_t. Los valores originales de la variable se sobrescriben. No se permite la conversión de tipo desde o a los tipos de variable ip_addr_t.

En el ejemplo siguiente, el contenido de ip_addr_t i1 se asigna a i2.
ip_addr_t i1, i2;                   // Declares two IP address variables. 
ip_addr_t i3, i4, i5;               // Declares three IP address variables.
i1 = __ip4hdr->src_addr;            // Get the source IP address of the packet in i1. 
i2 = i1 ;                           // Get the content of i1 into i2.
i3 = “10.10.10.1”;                  // Assign the constant IPv4 address to i3 variable.
i4 = “fe80::2c0c:33ff:fe48:f903”;   // Assign the Ipv6 address to i4 variable.
i5 = “example.com”;                 // Assign the hostname to i5 variable.
                                   // Get the content of i1 into i2.

Operación de comparación

Sólo se permiten los operadores de igualdad (==) y desigualdad (! =) para las variables de tipos ip_addr_t. La comparación solo se permite entre dos variables de tipo ip_addr_t y con tipo de serie constante (la dirección IP o los nombres de host se proporcionan entre comillas dobles "192.168.1.1" o "example.com").

El resultado del operador de igualdad es True (1) si ambos contienen el mismo tipo de dirección IP (IPV4 o IPV6) y valores. o False (0) de lo contrario. El operador de desigualdad es el complemento exacto de eso. No hay otros operadores de comparación (> =, >, < o = <) se permiten para las variables de tipo ip_addr_t.

if( i1 == i2)                     // comparing two ip_addr_t type variables.
																											//IP address string	 
printf(“IP addresses are equal”); 
else printf(“IP addresses are not equal”); 
or 
if( i1 == “192.168.1.1”)          // comparing ip_addr_t type variable and constant string.
 printf(“IP addresses are equal”); 
else printf(“IP addresses are not equal”);
or
if (i1 = “example.com”)          // comparing ip_addr_t type variable and constant       
                                 //IP address string
printf(“IP addresses are equal”); 
else printf(“IP addresses are not equal”);
 
Imprimir variables de tipo de dirección IP

Una variable de tipo ip_addr_t se puede imprimir con el especificador de formato "%I" para imprimir la dirección IP en formato decimal con puntos o hexadecimal y el especificador de formato "%H" para imprimir el nombre de host en la función printf () de Vue. Este nombre de host de impresión implica una operación de búsqueda dns que consume mucho tiempo. Por lo tanto, debe ser juiciosamente utilizado en los scripts VUE.

Nota: Cuando el usuario utiliza el especificador de formato "%H" para imprimir el nombre de host para la dirección IP que puede que no exista en dns, para esas direcciones IP, imprime las direcciones IP en formato decimal con puntos/hexadecimal en lugar del nombre de host.
Una matriz asociativa que tiene variables de tipo ip_addr_t como clave o valor (o ambas) puede imprimirse utilizando la función print ().
printf(“ Source IP address=[%I]\n”, __ip4hdr->src_addr); 
ip_aso[“src_ip_address”] = __ip4hdr->src_addr ; // Store source IP address as value in an associative array 
print(ip_aso); 
Limitaciones para la variable de tipo de dirección IP
  • La matriz de la variable ip_addr_t no se puede declarar.
  • El puntero a la variable ip_addr_t no está permitido.
  • La conversión de tipo de variable ip_addr_t a cualquier otro tipo o la conversión de tipo de tipo ip_addr_t a cualquier otro tipo no está permitida.
  • No se puede utilizar ningún operador aritmético (+,-, *,/, + +, -- etc) con la variable de tipo ip_addr_t.