mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-03 21:14:40 +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:
parent
89d666155d
commit
c1c65777b6
@ -6,12 +6,18 @@ HISTORY
|
|||||||
|
|
||||||
++ New features:
|
++ New features:
|
||||||
|
|
||||||
|
2015-04-10: Simon Goldschmidt
|
||||||
|
* many files: task #13480: added LWIP_IPV4 define - IPv4 can be disabled,
|
||||||
|
leaving an IPv6-only stack
|
||||||
|
|
||||||
|
2015-04-09: Simon Goldschmidt
|
||||||
* nearly all files: task #12722 (improve IPv4/v6 address handling): renamed
|
* nearly all files: task #12722 (improve IPv4/v6 address handling): renamed
|
||||||
ip_addr_t to ip4_addr_t, renamed ipX_addr_t to ip_addr_t and added IP
|
ip_addr_t to ip4_addr_t, renamed ipX_addr_t to ip_addr_t and added IP
|
||||||
version; ip_addr_t is used for all generic IP addresses for the API,
|
version; ip_addr_t is used for all generic IP addresses for the API,
|
||||||
ip(4/6)_addr_t are only used internally or when initializing netifs or when
|
ip(4/6)_addr_t are only used internally or when initializing netifs or when
|
||||||
calling version-related functions
|
calling version-related functions
|
||||||
|
|
||||||
|
2015-03-24: Simon Goldschmidt
|
||||||
* opt.h, ip4_addr.h, ip4.c, ip6.c: loopif is not required for loopback traffic
|
* opt.h, ip4_addr.h, ip4.c, ip6.c: loopif is not required for loopback traffic
|
||||||
any more but passed through any netif (ENABLE_LOOPBACK has to be enabled)
|
any more but passed through any netif (ENABLE_LOOPBACK has to be enabled)
|
||||||
|
|
||||||
|
@ -556,13 +556,13 @@ pcb_new(struct api_msg_msg *msg)
|
|||||||
if (msg->conn->pcb.ip == NULL) {
|
if (msg->conn->pcb.ip == NULL) {
|
||||||
msg->err = ERR_MEM;
|
msg->err = ERR_MEM;
|
||||||
}
|
}
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV4 && LWIP_IPV6
|
||||||
else {
|
else {
|
||||||
if (NETCONNTYPE_ISIPV6(msg->conn->type)) {
|
if (NETCONNTYPE_ISIPV6(msg->conn->type)) {
|
||||||
ip_set_v6(msg->conn->pcb.ip, 1);
|
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)
|
netifapi_do_netif_add(struct netifapi_msg_msg *msg)
|
||||||
{
|
{
|
||||||
if (!netif_add( msg->netif,
|
if (!netif_add( msg->netif,
|
||||||
|
#if LWIP_IPV4
|
||||||
API_EXPR_REF(msg->msg.add.ipaddr),
|
API_EXPR_REF(msg->msg.add.ipaddr),
|
||||||
API_EXPR_REF(msg->msg.add.netmask),
|
API_EXPR_REF(msg->msg.add.netmask),
|
||||||
API_EXPR_REF(msg->msg.add.gw),
|
API_EXPR_REF(msg->msg.add.gw),
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
msg->msg.add.state,
|
msg->msg.add.state,
|
||||||
msg->msg.add.init,
|
msg->msg.add.init,
|
||||||
msg->msg.add.input)) {
|
msg->msg.add.input)) {
|
||||||
@ -64,6 +66,7 @@ netifapi_do_netif_add(struct netifapi_msg_msg *msg)
|
|||||||
TCPIP_NETIFAPI_ACK(msg);
|
TCPIP_NETIFAPI_ACK(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LWIP_IPV4
|
||||||
/**
|
/**
|
||||||
* Call netif_set_addr() inside the tcpip_thread context.
|
* 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;
|
msg->err = ERR_OK;
|
||||||
TCPIP_NETIFAPI_ACK(msg);
|
TCPIP_NETIFAPI_ACK(msg);
|
||||||
}
|
}
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the
|
* 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
|
err_t
|
||||||
netifapi_netif_add(struct netif *netif,
|
netifapi_netif_add(struct netif *netif,
|
||||||
const ip4_addr_t *ipaddr,
|
#if LWIP_IPV4
|
||||||
const ip4_addr_t *netmask,
|
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
|
||||||
const ip4_addr_t *gw,
|
#endif /* LWIP_IPV4 */
|
||||||
void *state,
|
void *state, netif_init_fn init, netif_input_fn input)
|
||||||
netif_init_fn init,
|
|
||||||
netif_input_fn input)
|
|
||||||
{
|
{
|
||||||
err_t err;
|
err_t err;
|
||||||
NETIFAPI_VAR_DECLARE(msg);
|
NETIFAPI_VAR_DECLARE(msg);
|
||||||
@ -125,9 +127,11 @@ netifapi_netif_add(struct netif *netif,
|
|||||||
#endif /* LWIP_MPU_COMPATIBLE */
|
#endif /* LWIP_MPU_COMPATIBLE */
|
||||||
NETIFAPI_VAR_REF(msg).function = netifapi_do_netif_add;
|
NETIFAPI_VAR_REF(msg).function = netifapi_do_netif_add;
|
||||||
NETIFAPI_VAR_REF(msg).msg.netif = netif;
|
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.ipaddr = NETIFAPI_VAR_REF(ipaddr);
|
||||||
NETIFAPI_VAR_REF(msg).msg.msg.add.netmask = NETIFAPI_VAR_REF(netmask);
|
NETIFAPI_VAR_REF(msg).msg.msg.add.netmask = NETIFAPI_VAR_REF(netmask);
|
||||||
NETIFAPI_VAR_REF(msg).msg.msg.add.gw = NETIFAPI_VAR_REF(gw);
|
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.state = state;
|
||||||
NETIFAPI_VAR_REF(msg).msg.msg.add.init = init;
|
NETIFAPI_VAR_REF(msg).msg.msg.add.init = init;
|
||||||
NETIFAPI_VAR_REF(msg).msg.msg.add.input = input;
|
NETIFAPI_VAR_REF(msg).msg.msg.add.input = input;
|
||||||
@ -138,6 +142,7 @@ netifapi_netif_add(struct netif *netif,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LWIP_IPV4
|
||||||
/**
|
/**
|
||||||
* Call netif_set_addr() in a thread-safe way by running that function inside the
|
* Call netif_set_addr() in a thread-safe way by running that function inside the
|
||||||
* tcpip_thread context.
|
* tcpip_thread context.
|
||||||
@ -175,6 +180,7 @@ netifapi_netif_set_addr(struct netif *netif,
|
|||||||
NETIFAPI_VAR_FREE(msg);
|
NETIFAPI_VAR_FREE(msg);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe
|
* call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe
|
||||||
|
@ -71,6 +71,7 @@
|
|||||||
#define LWIP_NETCONN 0
|
#define LWIP_NETCONN 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if LWIP_IPV4
|
||||||
#define IP4ADDR_PORT_TO_SOCKADDR(sin, ipaddr, port) do { \
|
#define IP4ADDR_PORT_TO_SOCKADDR(sin, ipaddr, port) do { \
|
||||||
(sin)->sin_len = sizeof(struct sockaddr_in); \
|
(sin)->sin_len = sizeof(struct sockaddr_in); \
|
||||||
(sin)->sin_family = AF_INET; \
|
(sin)->sin_family = AF_INET; \
|
||||||
@ -80,8 +81,21 @@
|
|||||||
#define SOCKADDR4_TO_IP4ADDR_PORT(sin, ipaddr, port) do { \
|
#define SOCKADDR4_TO_IP4ADDR_PORT(sin, ipaddr, port) do { \
|
||||||
inet_addr_to_ipaddr(ip_2_ip4(ipaddr), &((sin)->sin_addr)); \
|
inet_addr_to_ipaddr(ip_2_ip4(ipaddr), &((sin)->sin_addr)); \
|
||||||
(port) = ntohs((sin)->sin_port); }while(0)
|
(port) = ntohs((sin)->sin_port); }while(0)
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
|
|
||||||
#if LWIP_IPV6
|
#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)) || \
|
#define IS_SOCK_ADDR_LEN_VALID(namelen) (((namelen) == sizeof(struct sockaddr_in)) || \
|
||||||
((namelen) == sizeof(struct sockaddr_in6)))
|
((namelen) == sizeof(struct sockaddr_in6)))
|
||||||
#define IS_SOCK_ADDR_TYPE_VALID(name) (((name)->sa_family == AF_INET) || \
|
#define IS_SOCK_ADDR_TYPE_VALID(name) (((name)->sa_family == AF_INET) || \
|
||||||
@ -89,21 +103,12 @@
|
|||||||
#define SOCK_ADDR_TYPE_MATCH(name, sock) \
|
#define SOCK_ADDR_TYPE_MATCH(name, sock) \
|
||||||
((((name)->sa_family == AF_INET) && !(NETCONNTYPE_ISIPV6((sock)->conn->type))) || \
|
((((name)->sa_family == AF_INET) && !(NETCONNTYPE_ISIPV6((sock)->conn->type))) || \
|
||||||
(((name)->sa_family == AF_INET6) && (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 { \
|
#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) do { \
|
||||||
if (IP_IS_V6(ipaddr)) { \
|
if (IP_IS_V6(ipaddr)) { \
|
||||||
IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port); \
|
IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port); \
|
||||||
} else { \
|
} else { \
|
||||||
IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port); \
|
IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port); \
|
||||||
} } while(0)
|
} } 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 { \
|
#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) do { \
|
||||||
if (((sockaddr)->sa_family) == AF_INET6) { \
|
if (((sockaddr)->sa_family) == AF_INET6) { \
|
||||||
SOCKADDR6_TO_IP6ADDR_PORT((struct sockaddr_in6*)(void*)(sockaddr), ipaddr, port); \
|
SOCKADDR6_TO_IP6ADDR_PORT((struct sockaddr_in6*)(void*)(sockaddr), ipaddr, port); \
|
||||||
@ -112,7 +117,16 @@
|
|||||||
} } while(0)
|
} } while(0)
|
||||||
#define DOMAIN_TO_NETCONN_TYPE(domain, type) (((domain) == AF_INET) ? \
|
#define DOMAIN_TO_NETCONN_TYPE(domain, type) (((domain) == AF_INET) ? \
|
||||||
(type) : (enum netconn_type)((type) | NETCONN_TYPE_IPV6))
|
(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_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in))
|
||||||
#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET)
|
#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET)
|
||||||
#define SOCK_ADDR_TYPE_MATCH(name, sock) 1
|
#define SOCK_ADDR_TYPE_MATCH(name, sock) 1
|
||||||
|
@ -48,6 +48,6 @@
|
|||||||
|
|
||||||
/** This variable is initialized by the system to contain the wildcard IPv6 address.
|
/** This variable is initialized by the system to contain the wildcard IPv6 address.
|
||||||
*/
|
*/
|
||||||
const struct ip6_addr in6addr_any = IN6ADDR_ANY_INIT;
|
const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
|
||||||
|
|
||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
@ -94,7 +94,9 @@ static err_t netif_null_output_ip6(struct netif *netif, struct pbuf *p, const ip
|
|||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
|
||||||
#if LWIP_HAVE_LOOPIF
|
#if LWIP_HAVE_LOOPIF
|
||||||
|
#if LWIP_IPV4
|
||||||
static err_t netif_loop_output_ipv4(struct netif *netif, struct pbuf *p, const ip4_addr_t* addr);
|
static err_t netif_loop_output_ipv4(struct netif *netif, struct pbuf *p, const ip4_addr_t* addr);
|
||||||
|
#endif
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
static err_t netif_loop_output_ipv6(struct netif *netif, struct pbuf *p, const ip6_addr_t* addr);
|
static err_t netif_loop_output_ipv6(struct netif *netif, struct pbuf *p, const ip6_addr_t* addr);
|
||||||
#endif
|
#endif
|
||||||
@ -119,7 +121,9 @@ netif_loopif_init(struct netif *netif)
|
|||||||
|
|
||||||
netif->name[0] = 'l';
|
netif->name[0] = 'l';
|
||||||
netif->name[1] = 'o';
|
netif->name[1] = 'o';
|
||||||
|
#if LWIP_IPV4
|
||||||
netif->output = netif_loop_output_ipv4;
|
netif->output = netif_loop_output_ipv4;
|
||||||
|
#endif
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
netif->output_ip6 = netif_loop_output_ipv6;
|
netif->output_ip6 = netif_loop_output_ipv6;
|
||||||
#endif
|
#endif
|
||||||
@ -131,15 +135,20 @@ void
|
|||||||
netif_init(void)
|
netif_init(void)
|
||||||
{
|
{
|
||||||
#if LWIP_HAVE_LOOPIF
|
#if LWIP_HAVE_LOOPIF
|
||||||
|
#if LWIP_IPV4
|
||||||
|
#define LOOPIF_ADDRINIT &loop_ipaddr, &loop_netmask, &loop_gw,
|
||||||
ip4_addr_t loop_ipaddr, loop_netmask, loop_gw;
|
ip4_addr_t loop_ipaddr, loop_netmask, loop_gw;
|
||||||
IP4_ADDR(&loop_gw, 127,0,0,1);
|
IP4_ADDR(&loop_gw, 127,0,0,1);
|
||||||
IP4_ADDR(&loop_ipaddr, 127,0,0,1);
|
IP4_ADDR(&loop_ipaddr, 127,0,0,1);
|
||||||
IP4_ADDR(&loop_netmask, 255,0,0,0);
|
IP4_ADDR(&loop_netmask, 255,0,0,0);
|
||||||
|
#else /* LWIP_IPV4 */
|
||||||
|
#define LOOPIF_ADDRINIT
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
|
|
||||||
#if NO_SYS
|
#if NO_SYS
|
||||||
netif_add(&loop_netif, &loop_ipaddr, &loop_netmask, &loop_gw, NULL, netif_loopif_init, ip_input);
|
netif_add(&loop_netif, LOOPIF_ADDRINIT NULL, netif_loopif_init, ip_input);
|
||||||
#else /* NO_SYS */
|
#else /* NO_SYS */
|
||||||
netif_add(&loop_netif, &loop_ipaddr, &loop_netmask, &loop_gw, NULL, netif_loopif_init, tcpip_input);
|
netif_add(&loop_netif, LOOPIF_ADDRINIT NULL, netif_loopif_init, tcpip_input);
|
||||||
#endif /* NO_SYS */
|
#endif /* NO_SYS */
|
||||||
|
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
@ -173,8 +182,6 @@ struct netif *
|
|||||||
netif_add(struct netif *netif,
|
netif_add(struct netif *netif,
|
||||||
#if LWIP_IPV4
|
#if LWIP_IPV4
|
||||||
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
|
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
|
||||||
#else /* LWIP_IPV4 */
|
|
||||||
const void *ipaddr, const void *netmask, const void *gw,
|
|
||||||
#endif /* LWIP_IPV4 */
|
#endif /* LWIP_IPV4 */
|
||||||
void *state, netif_init_fn init, netif_input_fn input)
|
void *state, netif_init_fn init, netif_input_fn input)
|
||||||
{
|
{
|
||||||
|
@ -238,17 +238,21 @@ udp_input(struct pbuf *p, struct netif *inp)
|
|||||||
if (pcb->local_port == dest) {
|
if (pcb->local_port == dest) {
|
||||||
if (
|
if (
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
((PCB_ISIPV6(pcb) && (ip_current_is_v6()) &&
|
(PCB_ISIPV6(pcb) && (ip_current_is_v6()) &&
|
||||||
(ip6_addr_isany(ip_2_ip6(&pcb->local_ip)) ||
|
(ip6_addr_isany(ip_2_ip6(&pcb->local_ip)) ||
|
||||||
#if LWIP_IPV6_MLD
|
#if LWIP_IPV6_MLD
|
||||||
ip6_addr_ismulticast(ip6_current_dest_addr()) ||
|
ip6_addr_ismulticast(ip6_current_dest_addr()) ||
|
||||||
#endif /* LWIP_IPV6_MLD */
|
#endif /* LWIP_IPV6_MLD */
|
||||||
ip6_addr_cmp(ip_2_ip6(&pcb->local_ip), ip6_current_dest_addr()))) ||
|
ip6_addr_cmp(ip_2_ip6(&pcb->local_ip), ip6_current_dest_addr())))
|
||||||
(!PCB_ISIPV6(pcb) &&
|
|
||||||
(ip4_current_header() != NULL) &&
|
|
||||||
#else /* LWIP_IPV6 */
|
|
||||||
((
|
|
||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
#if LWIP_IPV4 && LWIP_IPV6
|
||||||
|
|| (!PCB_ISIPV6(pcb) &&
|
||||||
|
(ip4_current_header() != NULL) &&
|
||||||
|
#endif /* LWIP_IPV4 && LWIP_IPV6 */
|
||||||
|
#if LWIP_IPV4
|
||||||
|
#if !LWIP_IPV6
|
||||||
|
(
|
||||||
|
#endif /* !LWIP_IPV6 */
|
||||||
((!broadcast && ip_addr_isany(&pcb->local_ip)) ||
|
((!broadcast && ip_addr_isany(&pcb->local_ip)) ||
|
||||||
ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr()) ||
|
ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr()) ||
|
||||||
#if LWIP_IGMP
|
#if LWIP_IGMP
|
||||||
@ -257,12 +261,14 @@ udp_input(struct pbuf *p, struct netif *inp)
|
|||||||
#if IP_SOF_BROADCAST_RECV
|
#if IP_SOF_BROADCAST_RECV
|
||||||
(broadcast && ip_get_option(pcb, SOF_BROADCAST) &&
|
(broadcast && ip_get_option(pcb, SOF_BROADCAST) &&
|
||||||
(ip_addr_isany(&pcb->local_ip) ||
|
(ip_addr_isany(&pcb->local_ip) ||
|
||||||
ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask))))))) {
|
ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))))
|
||||||
#else /* IP_SOF_BROADCAST_RECV */
|
#else /* IP_SOF_BROADCAST_RECV */
|
||||||
(broadcast &&
|
(broadcast &&
|
||||||
(ip_addr_isany(&pcb->local_ip) ||
|
(ip_addr_isany(&pcb->local_ip) ||
|
||||||
ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask))))))) {
|
ip_addr_netcmp(&pcb->local_ip, ip_current_dest_addr(), &inp->netmask)))))
|
||||||
#endif /* IP_SOF_BROADCAST_RECV */
|
#endif /* IP_SOF_BROADCAST_RECV */
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
|
) {
|
||||||
local_match = 1;
|
local_match = 1;
|
||||||
if ((uncon_pcb == NULL) &&
|
if ((uncon_pcb == NULL) &&
|
||||||
((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) {
|
((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) {
|
||||||
|
@ -61,8 +61,8 @@ struct in_addr {
|
|||||||
|
|
||||||
struct in6_addr {
|
struct in6_addr {
|
||||||
union {
|
union {
|
||||||
u8_t u8_addr[16];
|
|
||||||
u32_t u32_addr[4];
|
u32_t u32_addr[4];
|
||||||
|
u8_t u8_addr[16];
|
||||||
} un;
|
} un;
|
||||||
#define s6_addr un.u8_addr
|
#define s6_addr un.u8_addr
|
||||||
};
|
};
|
||||||
@ -83,7 +83,7 @@ struct in6_addr {
|
|||||||
to the IPv6 loopback address. */
|
to the IPv6 loopback address. */
|
||||||
#define IN6ADDR_LOOPBACK_INIT {0,0,0,PP_HTONL(1)}
|
#define IN6ADDR_LOOPBACK_INIT {0,0,0,PP_HTONL(1)}
|
||||||
/** This variable is initialized by the system to contain the wildcard IPv6 address. */
|
/** This variable is initialized by the system to contain the wildcard IPv6 address. */
|
||||||
extern const struct ip6_addr in6addr_any;
|
extern const struct in6_addr in6addr_any;
|
||||||
|
|
||||||
/* Definitions of the bits in an (IPv4) Internet address integer.
|
/* Definitions of the bits in an (IPv4) Internet address integer.
|
||||||
|
|
||||||
|
@ -250,6 +250,11 @@ extern const ip_addr_t ip6_addr_any;
|
|||||||
*/
|
*/
|
||||||
#define IP6_ADDR_ANY6 ((ip6_addr_t*)ip_2_ip6(&ip6_addr_any))
|
#define IP6_ADDR_ANY6 ((ip6_addr_t*)ip_2_ip6(&ip6_addr_any))
|
||||||
|
|
||||||
|
#if !LWIP_IPV4
|
||||||
|
/** Just a little upgrade-helper for IPv6-only configurations: */
|
||||||
|
#define IP_ADDR_ANY IP6_ADDR_ANY
|
||||||
|
#endif /* !LWIP_IPV4 */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -322,17 +322,14 @@ extern struct netif *netif_default;
|
|||||||
|
|
||||||
void netif_init(void);
|
void netif_init(void);
|
||||||
|
|
||||||
|
struct netif *netif_add(struct netif *netif,
|
||||||
#if LWIP_IPV4
|
#if LWIP_IPV4
|
||||||
struct netif *
|
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
|
||||||
netif_add(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask,
|
#endif /* LWIP_IPV4 */
|
||||||
const ip4_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input);
|
void *state, netif_init_fn init, netif_input_fn input);
|
||||||
void
|
#if LWIP_IPV4
|
||||||
netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask,
|
void netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask,
|
||||||
const ip4_addr_t *gw);
|
const ip4_addr_t *gw);
|
||||||
#else /* LWIP_IPV4 */
|
|
||||||
struct netif *
|
|
||||||
netif_add(struct netif *netif, const void *ipaddr, const void *netmask,
|
|
||||||
const void *gw, void *state, netif_init_fn init, netif_input_fn input);
|
|
||||||
#endif /* LWIP_IPV4 */
|
#endif /* LWIP_IPV4 */
|
||||||
void netif_remove(struct netif * netif);
|
void netif_remove(struct netif * netif);
|
||||||
|
|
||||||
|
@ -58,9 +58,11 @@ struct netifapi_msg_msg {
|
|||||||
struct netif *netif;
|
struct netif *netif;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
|
#if LWIP_IPV4
|
||||||
NETIFAPI_IPADDR_DEF(ip4_addr_t, ipaddr);
|
NETIFAPI_IPADDR_DEF(ip4_addr_t, ipaddr);
|
||||||
NETIFAPI_IPADDR_DEF(ip4_addr_t, netmask);
|
NETIFAPI_IPADDR_DEF(ip4_addr_t, netmask);
|
||||||
NETIFAPI_IPADDR_DEF(ip4_addr_t, gw);
|
NETIFAPI_IPADDR_DEF(ip4_addr_t, gw);
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
void *state;
|
void *state;
|
||||||
netif_init_fn init;
|
netif_init_fn init;
|
||||||
netif_input_fn input;
|
netif_input_fn input;
|
||||||
@ -80,20 +82,17 @@ struct netifapi_msg {
|
|||||||
|
|
||||||
/* API for application */
|
/* API for application */
|
||||||
err_t netifapi_netif_add(struct netif *netif,
|
err_t netifapi_netif_add(struct netif *netif,
|
||||||
const ip4_addr_t *ipaddr,
|
#if LWIP_IPV4
|
||||||
const ip4_addr_t *netmask,
|
const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
|
||||||
const ip4_addr_t *gw,
|
#endif /* LWIP_IPV4 */
|
||||||
void *state,
|
void *state, netif_init_fn init, netif_input_fn input);
|
||||||
netif_init_fn init,
|
|
||||||
netif_input_fn input);
|
|
||||||
|
|
||||||
err_t netifapi_netif_set_addr ( struct netif *netif,
|
#if LWIP_IPV4
|
||||||
const ip4_addr_t *ipaddr,
|
err_t netifapi_netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr,
|
||||||
const ip4_addr_t *netmask,
|
const ip4_addr_t *netmask, const ip4_addr_t *gw);
|
||||||
const ip4_addr_t *gw );
|
#endif /* LWIP_IPV4*/
|
||||||
|
|
||||||
err_t netifapi_netif_common ( struct netif *netif,
|
err_t netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc,
|
||||||
netifapi_void_fn voidfunc,
|
|
||||||
netifapi_errt_fn errtfunc);
|
netifapi_errt_fn errtfunc);
|
||||||
|
|
||||||
#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL)
|
#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user