?? net_ip.c
字號:
CPU_CRITICAL_ENTER();
addr = NetIP_AddrThisHost;
CPU_CRITICAL_EXIT();
return (addr);
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_GetAddrDfltGateway()
*
* Description : Get this host's default gateway IP address.
*
* Argument(s) : none.
*
* Return(s) : This host's default gateway IP address in host-order.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
NET_IP_ADDR NetIP_GetAddrDfltGateway (void)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
NET_IP_ADDR addr;
CPU_CRITICAL_ENTER();
addr = NetIP_AddrDfltGateway;
CPU_CRITICAL_EXIT();
return (addr);
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_GetAddrStrThisHost()
*
* Description : Get this host's IP address as an ASCII string.
*
* Argument(s) : paddr Pointer to an ASCII character array that will receive the return ASCII string
* from this function (see Note #1).
*
* Return(s) : Pointer to this host's IP address string, if NO errors.
*
* Pointer to NULL, otherwise.
*
* Caller(s) : Application.
*
* Note(s) : (1) The size of the ASCII character array that will receive the return ASCII string MUST be
* greater than or equal to NET_ASCII_LEN_MAX_ADDR_IP.
*
* See also 'net_ascii.c NetASCII_IP_to_Str() Note #2'.
*********************************************************************************************************
*/
CPU_CHAR *NetIP_GetAddrStrThisHost (CPU_CHAR *paddr)
{
NET_IP_ADDR addr;
NET_ERR err;
addr = NetIP_GetAddrThisHost(); /* Get this host's IP addr. */
NetASCII_IP_to_Str(addr, paddr, DEF_NO, &err); /* Conv IP addr to IP addr str. */
if (err != NET_ASCII_ERR_NONE) { /* On any str err, ... */
*paddr = (CPU_CHAR )0; /* ... rtn NULL addr ... */
return ((CPU_CHAR *)0); /* ... & rtn NULL. */
}
return (paddr);
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_GetAddrStrDfltGateway()
*
* Description : Get this host's default gateway IP address as an ASCII string.
*
* Argument(s) : paddr Pointer to an ASCII character array that will receive the return ASCII string
* from this function (see Note #1).
*
* Return(s) : Pointer to this host's default gateway IP address string, if NO errors.
*
* Pointer to NULL, otherwise.
*
* Caller(s) : Application.
*
* Note(s) : (1) The size of the ASCII character array that will receive the return ASCII string MUST be
* greater than or equal to NET_ASCII_LEN_MAX_ADDR_IP.
*
* See also 'net_ascii.c NetASCII_IP_to_Str() Note #2'.
*********************************************************************************************************
*/
CPU_CHAR *NetIP_GetAddrStrDfltGateway (CPU_CHAR *paddr)
{
NET_IP_ADDR addr;
NET_ERR err;
addr = NetIP_GetAddrDfltGateway(); /* Get this host's dflt gateway IP addr. */
NetASCII_IP_to_Str(addr, paddr, DEF_NO, &err); /* Conv IP addr to IP addr str. */
if (err != NET_ASCII_ERR_NONE) { /* On any str err, ... */
*paddr = (CPU_CHAR )0; /* ... rtn NULL addr ... */
return ((CPU_CHAR *)0); /* ... & rtn NULL. */
}
return (paddr);
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_IsValidAddrHost()
*
* Description : (1) Validate an IP host address which MUST NOT be one of the following :
*
* (a) This Host RFC #1122, Section 3.2.1.3.(a)
* (b) Limited Broadcast RFC #1122, Section 3.2.1.3.(c)
* (c) Localhost RFC #1122, Section 3.2.1.3.(g)
* (d) Specified Host RFC #1122, Section 3.2.1.3.(b)
* (e) Directed Broadcast RFC #1122, Section 3.2.1.3.(d)
*
* (2) ONLY validates typical IP host addresses, since 'This Host' & 'Specified Host' IP host
* addresses are ONLY valid during a host's initialization (see Notes #1a & #1d). This
* function CANNOT be used to validate host addresses if any 'This Host' or 'Specified Host'
* host addresses are passed.
*
*
* Argument(s) : addr_host IP host address to validate.
*
* Return(s) : DEF_YES, if IP host address valid.
*
* DEF_NO, otherwise.
*
* Caller(s) : various.
*
* Note(s) : (3) See 'net_ip.h IP ADDRESS DEFINES Notes #2, #3, & #4' for supported IP addresses.
*********************************************************************************************************
*/
CPU_BOOLEAN NetIP_IsValidAddrHost (NET_IP_ADDR addr_host)
{
CPU_BOOLEAN valid;
valid = DEF_YES;
/* -------------- VALIDATE HOST ADDR -------------- */
/* Chk invalid 'This Host' (see Note #1a). */
if (addr_host == NET_IP_ADDR_THIS_HOST) {
valid = DEF_NO;
/* Chk invalid limited broadcast (see Note #1b). */
} else if (addr_host == NET_IP_ADDR_BROADCAST) {
valid = DEF_NO;
/* Chk invalid localhost (see Note #1c). */
} else if ((addr_host & NET_IP_ADDR_LOCAL_HOST_MASK) == NET_IP_ADDR_LOCAL_HOST) {
valid = DEF_NO;
} else if ((addr_host & NET_IP_ADDR_CLASS_A_MASK) == NET_IP_ADDR_CLASS_A) {
/* Chk invalid Class-A specified (see Note #1d). */
if ((addr_host & NET_IP_ADDR_CLASS_A_MASK_HOST) ==
(NET_IP_ADDR_THIS_HOST & NET_IP_ADDR_CLASS_A_MASK_HOST)) {
valid = DEF_NO;
}
/* Chk invalid Class-A broadcast (see Note #1e). */
if ((addr_host & NET_IP_ADDR_CLASS_A_MASK_HOST) ==
(NET_IP_ADDR_BROADCAST & NET_IP_ADDR_CLASS_A_MASK_HOST)) {
valid = DEF_NO;
}
} else if ((addr_host & NET_IP_ADDR_CLASS_B_MASK) == NET_IP_ADDR_CLASS_B) {
/* Chk invalid Class-B specified (see Note #1d). */
if ((addr_host & NET_IP_ADDR_CLASS_B_MASK_HOST) ==
(NET_IP_ADDR_THIS_HOST & NET_IP_ADDR_CLASS_B_MASK_HOST)) {
valid = DEF_NO;
}
/* Chk invalid Class-B broadcast (see Note #1e). */
if ((addr_host & NET_IP_ADDR_CLASS_B_MASK_HOST) ==
(NET_IP_ADDR_BROADCAST & NET_IP_ADDR_CLASS_B_MASK_HOST)) {
valid = DEF_NO;
}
} else if ((addr_host & NET_IP_ADDR_CLASS_C_MASK) == NET_IP_ADDR_CLASS_C) {
/* Chk invalid Class-C specified (see Note #1d). */
if ((addr_host & NET_IP_ADDR_CLASS_C_MASK_HOST) ==
(NET_IP_ADDR_THIS_HOST & NET_IP_ADDR_CLASS_C_MASK_HOST)) {
valid = DEF_NO;
}
/* Chk invalid Class-C broadcast (see Note #1e). */
if ((addr_host & NET_IP_ADDR_CLASS_C_MASK_HOST) ==
(NET_IP_ADDR_BROADCAST & NET_IP_ADDR_CLASS_C_MASK_HOST)) {
valid = DEF_NO;
}
} else { /* Invalid addr class (see Note #3). */
valid = DEF_NO;
}
return (valid);
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_IsValidAddrThisHost()
*
* Description : (1) Validate this host's IP address which MUST NOT be one of the following :
*
* (a) This Host RFC #1122, Section 3.2.1.3.(a)
* (b) Limited Broadcast RFC #1122, Section 3.2.1.3.(c)
* (c) Localhost RFC #1122, Section 3.2.1.3.(g)
* (d) Specified Host RFC #1122, Section 3.2.1.3.(b)
* (e) Directed Broadcast RFC #1122, Section 3.2.1.3.(d)
* (f) Subnet Broadcast RFC #1122, Section 3.2.1.3.(e)
*
* (2) ONLY validates this host's IP address, since 'This Host' & 'Specified Host' IP host
* addresses are ONLY valid during a host's initialization (see Notes #1a & #1d). This
* function CANNOT be used to validate host addresses if any 'This Host' or 'Specified Host'
* host addresses are passed.
*
*
* Argument(s) : addr_host IP host address to validate.
*
* addr_subnet_mask IP subnet mask.
*
* Return(s) : DEF_YES, if this host's IP address valid.
*
* DEF_NO, otherwise.
*
* Caller(s) : NetIP_CfgAddrThisHost().
*
* Note(s) : (3) See 'net_ip.h IP ADDRESS DEFINES Notes #2, #3, & #4' for supported IP addresses.
*********************************************************************************************************
*/
CPU_BOOLEAN NetIP_IsValidAddrThisHost (NET_IP_ADDR addr_host,
NET_IP_ADDR addr_subnet_mask)
{
CPU_BOOLEAN valid_host;
CPU_BOOLEAN valid_mask;
CPU_BOOLEAN valid;
valid_host = NetIP_IsValidAddrHost(addr_host);
valid_mask = NetIP_IsValidAddrSubnetMask(addr_subnet_mask);
valid = ((valid_host == DEF_YES) &&
(valid_mask == DEF_YES)) ? DEF_YES : DEF_NO;
if (valid == DEF_YES) {
/* Chk invalid subnet specified (see Note #1d). */
if ((addr_host & addr_subnet_mask) == NET_IP_ADDR_THIS_HOST) {
valid = DEF_NO;
}
/* Chk invalid subnet broadcast (see Note #1f). */
if ((addr_host & addr_subnet_mask) == NET_IP_ADDR_BROADCAST) {
valid = DEF_NO;
}
}
return (valid);
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_IsValidAddrSubnetMask()
*
* Description : (1) Validate an IP subnet mask :
*
* (a) RFC #1122, Section 3.2.1.3 states that ... :
*
* (1) "IP addresses are not permitted to have the value 0 or -1 for any of the ...
* <Subnet-number> fields" ...
* (2) "This implies that each of these fields will be at least two bits long."
*
* (b) RFC #950, Section 2.1 'Special Addresses' reiterates that "the values of all
* zeros and all ones in the subnet field should not be assigned to actual
* (physical) subnets".
*
* (c) RFC #950, Section 2.1 also states that "the bits that identify the subnet ...
* need not be adjacent in the address. However, we recommend that the subnet
* bits be contiguous and located as the most significant bits of the local
* address".
*
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -