mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-06-13 08:23:56 +08:00
worked on task #13480: added LWIP_IPV4 define - IPv4 can be disabled, leaving an IPv6-only stack (SNMP is still missing)
This commit is contained in:
@@ -556,13 +556,13 @@ pcb_new(struct api_msg_msg *msg)
|
||||
if (msg->conn->pcb.ip == NULL) {
|
||||
msg->err = ERR_MEM;
|
||||
}
|
||||
#if LWIP_IPV6
|
||||
#if LWIP_IPV4 && LWIP_IPV6
|
||||
else {
|
||||
if (NETCONNTYPE_ISIPV6(msg->conn->type)) {
|
||||
ip_set_v6(msg->conn->pcb.ip, 1);
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_IPV6 */
|
||||
#endif /* LWIP_IPV4 && LWIP_IPV6 */
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -51,9 +51,11 @@ static void
|
||||
netifapi_do_netif_add(struct netifapi_msg_msg *msg)
|
||||
{
|
||||
if (!netif_add( msg->netif,
|
||||
#if LWIP_IPV4
|
||||
API_EXPR_REF(msg->msg.add.ipaddr),
|
||||
API_EXPR_REF(msg->msg.add.netmask),
|
||||
API_EXPR_REF(msg->msg.add.gw),
|
||||
#endif /* LWIP_IPV4 */
|
||||
msg->msg.add.state,
|
||||
msg->msg.add.init,
|
||||
msg->msg.add.input)) {
|
||||
@@ -64,6 +66,7 @@ netifapi_do_netif_add(struct netifapi_msg_msg *msg)
|
||||
TCPIP_NETIFAPI_ACK(msg);
|
||||
}
|
||||
|
||||
#if LWIP_IPV4
|
||||
/**
|
||||
* Call netif_set_addr() inside the tcpip_thread context.
|
||||
*/
|
||||
@@ -77,6 +80,7 @@ netifapi_do_netif_set_addr(struct netifapi_msg_msg *msg)
|
||||
msg->err = ERR_OK;
|
||||
TCPIP_NETIFAPI_ACK(msg);
|
||||
}
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
/**
|
||||
* Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the
|
||||
@@ -102,12 +106,10 @@ netifapi_do_netif_common(struct netifapi_msg_msg *msg)
|
||||
*/
|
||||
err_t
|
||||
netifapi_netif_add(struct netif *netif,
|
||||
const ip4_addr_t *ipaddr,
|
||||
const ip4_addr_t *netmask,
|
||||
const ip4_addr_t *gw,
|
||||
void *state,
|
||||
netif_init_fn init,
|
||||
netif_input_fn input)
|
||||
#if LWIP_IPV4
|
||||
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
|
||||
#endif /* LWIP_IPV4 */
|
||||
void *state, netif_init_fn init, netif_input_fn input)
|
||||
{
|
||||
err_t err;
|
||||
NETIFAPI_VAR_DECLARE(msg);
|
||||
@@ -125,9 +127,11 @@ netifapi_netif_add(struct netif *netif,
|
||||
#endif /* LWIP_MPU_COMPATIBLE */
|
||||
NETIFAPI_VAR_REF(msg).function = netifapi_do_netif_add;
|
||||
NETIFAPI_VAR_REF(msg).msg.netif = netif;
|
||||
#if LWIP_IPV4
|
||||
NETIFAPI_VAR_REF(msg).msg.msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr);
|
||||
NETIFAPI_VAR_REF(msg).msg.msg.add.netmask = NETIFAPI_VAR_REF(netmask);
|
||||
NETIFAPI_VAR_REF(msg).msg.msg.add.gw = NETIFAPI_VAR_REF(gw);
|
||||
#endif /* LWIP_IPV4 */
|
||||
NETIFAPI_VAR_REF(msg).msg.msg.add.state = state;
|
||||
NETIFAPI_VAR_REF(msg).msg.msg.add.init = init;
|
||||
NETIFAPI_VAR_REF(msg).msg.msg.add.input = input;
|
||||
@@ -138,6 +142,7 @@ netifapi_netif_add(struct netif *netif,
|
||||
return err;
|
||||
}
|
||||
|
||||
#if LWIP_IPV4
|
||||
/**
|
||||
* Call netif_set_addr() in a thread-safe way by running that function inside the
|
||||
* tcpip_thread context.
|
||||
@@ -175,6 +180,7 @@ netifapi_netif_set_addr(struct netif *netif,
|
||||
NETIFAPI_VAR_FREE(msg);
|
||||
return err;
|
||||
}
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
/**
|
||||
* call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
#define LWIP_NETCONN 0
|
||||
#endif
|
||||
|
||||
#if LWIP_IPV4
|
||||
#define IP4ADDR_PORT_TO_SOCKADDR(sin, ipaddr, port) do { \
|
||||
(sin)->sin_len = sizeof(struct sockaddr_in); \
|
||||
(sin)->sin_family = AF_INET; \
|
||||
@@ -80,8 +81,21 @@
|
||||
#define SOCKADDR4_TO_IP4ADDR_PORT(sin, ipaddr, port) do { \
|
||||
inet_addr_to_ipaddr(ip_2_ip4(ipaddr), &((sin)->sin_addr)); \
|
||||
(port) = ntohs((sin)->sin_port); }while(0)
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
#if LWIP_IPV6
|
||||
#define IP6ADDR_PORT_TO_SOCKADDR(sin6, ipaddr, port) do { \
|
||||
(sin6)->sin6_len = sizeof(struct sockaddr_in6); \
|
||||
(sin6)->sin6_family = AF_INET6; \
|
||||
(sin6)->sin6_port = htons((port)); \
|
||||
(sin6)->sin6_flowinfo = 0; \
|
||||
inet6_addr_from_ip6addr(&(sin6)->sin6_addr, ipaddr); }while(0)
|
||||
#define SOCKADDR6_TO_IP6ADDR_PORT(sin6, ipaddr, port) do { \
|
||||
inet6_addr_to_ip6addr(ip_2_ip6(ipaddr), &((sin6)->sin6_addr)); \
|
||||
(port) = ntohs((sin6)->sin6_port); }while(0)
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
#if LWIP_IPV4 && LWIP_IPV6
|
||||
#define IS_SOCK_ADDR_LEN_VALID(namelen) (((namelen) == sizeof(struct sockaddr_in)) || \
|
||||
((namelen) == sizeof(struct sockaddr_in6)))
|
||||
#define IS_SOCK_ADDR_TYPE_VALID(name) (((name)->sa_family == AF_INET) || \
|
||||
@@ -89,21 +103,12 @@
|
||||
#define SOCK_ADDR_TYPE_MATCH(name, sock) \
|
||||
((((name)->sa_family == AF_INET) && !(NETCONNTYPE_ISIPV6((sock)->conn->type))) || \
|
||||
(((name)->sa_family == AF_INET6) && (NETCONNTYPE_ISIPV6((sock)->conn->type))))
|
||||
#define IP6ADDR_PORT_TO_SOCKADDR(sin6, ipaddr, port) do { \
|
||||
(sin6)->sin6_len = sizeof(struct sockaddr_in6); \
|
||||
(sin6)->sin6_family = AF_INET6; \
|
||||
(sin6)->sin6_port = htons((port)); \
|
||||
(sin6)->sin6_flowinfo = 0; \
|
||||
inet6_addr_from_ip6addr(&(sin6)->sin6_addr, ipaddr); }while(0)
|
||||
#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) do { \
|
||||
if (IP_IS_V6(ipaddr)) { \
|
||||
IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port); \
|
||||
} else { \
|
||||
IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port); \
|
||||
} } while(0)
|
||||
#define SOCKADDR6_TO_IP6ADDR_PORT(sin6, ipaddr, port) do { \
|
||||
inet6_addr_to_ip6addr(ip_2_ip6(ipaddr), &((sin6)->sin6_addr)); \
|
||||
(port) = ntohs((sin6)->sin6_port); }while(0)
|
||||
#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) do { \
|
||||
if (((sockaddr)->sa_family) == AF_INET6) { \
|
||||
SOCKADDR6_TO_IP6ADDR_PORT((struct sockaddr_in6*)(void*)(sockaddr), ipaddr, port); \
|
||||
@@ -112,7 +117,16 @@
|
||||
} } while(0)
|
||||
#define DOMAIN_TO_NETCONN_TYPE(domain, type) (((domain) == AF_INET) ? \
|
||||
(type) : (enum netconn_type)((type) | NETCONN_TYPE_IPV6))
|
||||
#else /* LWIP_IPV6 */
|
||||
#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */
|
||||
#define IS_SOCK_ADDR_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in6))
|
||||
#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET6)
|
||||
#define SOCK_ADDR_TYPE_MATCH(name, sock) 1
|
||||
#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) \
|
||||
IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port)
|
||||
#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) \
|
||||
SOCKADDR6_TO_IP6ADDR_PORT((struct sockaddr_in6*)(void*)(sockaddr), ipaddr, port)
|
||||
#define DOMAIN_TO_NETCONN_TYPE(domain, netconn_type) (netconn_type)
|
||||
#else /*-> LWIP_IPV4: LWIP_IPV4 && LWIP_IPV6 */
|
||||
#define IS_SOCK_ADDR_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in))
|
||||
#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET)
|
||||
#define SOCK_ADDR_TYPE_MATCH(name, sock) 1
|
||||
|
||||
Reference in New Issue
Block a user