mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-04 21:44:38 +08:00
Implement support for UDP IP_ANY_TYPE in netconn API
This commit is contained in:
parent
2289673a30
commit
5404ce3c0a
@ -523,7 +523,11 @@ pcb_new(struct api_msg_msg *msg)
|
|||||||
#endif /* LWIP_RAW */
|
#endif /* LWIP_RAW */
|
||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
msg->conn->pcb.udp = udp_new();
|
if(NETCONNTYPE_ANYIP(msg->conn->type)) {
|
||||||
|
msg->conn->pcb.udp = udp_new_ip_type(IPADDR_TYPE_ANY);
|
||||||
|
} else {
|
||||||
|
msg->conn->pcb.udp = udp_new();
|
||||||
|
}
|
||||||
if (msg->conn->pcb.udp != NULL) {
|
if (msg->conn->pcb.udp != NULL) {
|
||||||
#if LWIP_UDPLITE
|
#if LWIP_UDPLITE
|
||||||
if (NETCONNTYPE_ISUDPLITE(msg->conn->type)) {
|
if (NETCONNTYPE_ISUDPLITE(msg->conn->type)) {
|
||||||
@ -1351,7 +1355,7 @@ lwip_netconn_do_send(struct api_msg_msg *msg)
|
|||||||
#if LWIP_UDP
|
#if LWIP_UDP
|
||||||
case NETCONN_UDP:
|
case NETCONN_UDP:
|
||||||
#if LWIP_CHECKSUM_ON_COPY
|
#if LWIP_CHECKSUM_ON_COPY
|
||||||
if (ip_addr_isany(&msg->msg.b->addr)) {
|
if (ip_addr_isany(&msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) {
|
||||||
msg->err = udp_send_chksum(msg->conn->pcb.udp, msg->msg.b->p,
|
msg->err = udp_send_chksum(msg->conn->pcb.udp, msg->msg.b->p,
|
||||||
msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
|
msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
|
||||||
} else {
|
} else {
|
||||||
@ -1360,7 +1364,7 @@ lwip_netconn_do_send(struct api_msg_msg *msg)
|
|||||||
msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
|
msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
|
||||||
}
|
}
|
||||||
#else /* LWIP_CHECKSUM_ON_COPY */
|
#else /* LWIP_CHECKSUM_ON_COPY */
|
||||||
if (ip_addr_isany_val(msg->msg.b->addr)) {
|
if (ip_addr_isany_val(msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) {
|
||||||
msg->err = udp_send(msg->conn->pcb.udp, msg->msg.b->p);
|
msg->err = udp_send(msg->conn->pcb.udp, msg->msg.b->p);
|
||||||
} else {
|
} else {
|
||||||
msg->err = udp_sendto(msg->conn->pcb.udp, msg->msg.b->p, &msg->msg.b->addr, msg->msg.b->port);
|
msg->err = udp_sendto(msg->conn->pcb.udp, msg->msg.b->p, &msg->msg.b->addr, msg->msg.b->port);
|
||||||
|
@ -79,14 +79,17 @@ extern "C" {
|
|||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
|
||||||
|
|
||||||
/* Helpers to process several netconn_types by the same code */
|
#define NETCONN_TYPE_IP_ANY 0x04
|
||||||
|
#define NETCONNTYPE_ANYIP(t) (((t)&NETCONN_TYPE_IP_ANY) != 0)
|
||||||
|
|
||||||
|
/* Helpers to process several netconn_types by the same code */
|
||||||
#define NETCONNTYPE_GROUP(t) ((t)&0xF0)
|
#define NETCONNTYPE_GROUP(t) ((t)&0xF0)
|
||||||
#define NETCONNTYPE_DATAGRAM(t) ((t)&0xE0)
|
#define NETCONNTYPE_DATAGRAM(t) ((t)&0xE0)
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
#define NETCONN_TYPE_IPV6 0x08
|
#define NETCONN_TYPE_IPV6 0x08
|
||||||
#define NETCONNTYPE_ISIPV6(t) (((t)&NETCONN_TYPE_IPV6) != 0)
|
#define NETCONNTYPE_ISIPV6(t) (((t)&NETCONN_TYPE_IPV6) != 0)
|
||||||
#define NETCONNTYPE_ISUDPLITE(t) (((t)&0xF7) == NETCONN_UDPLITE)
|
#define NETCONNTYPE_ISUDPLITE(t) (((t)&0xF3) == NETCONN_UDPLITE)
|
||||||
#define NETCONNTYPE_ISUDPNOCHKSUM(t) (((t)&0xF7) == NETCONN_UDPNOCHKSUM)
|
#define NETCONNTYPE_ISUDPNOCHKSUM(t) (((t)&0xF3) == NETCONN_UDPNOCHKSUM)
|
||||||
#else /* LWIP_IPV6 */
|
#else /* LWIP_IPV6 */
|
||||||
#define NETCONNTYPE_ISUDPLITE(t) ((t) == NETCONN_UDPLITE)
|
#define NETCONNTYPE_ISUDPLITE(t) ((t) == NETCONN_UDPLITE)
|
||||||
#define NETCONNTYPE_ISUDPNOCHKSUM(t) ((t) == NETCONN_UDPNOCHKSUM)
|
#define NETCONNTYPE_ISUDPNOCHKSUM(t) ((t) == NETCONN_UDPNOCHKSUM)
|
||||||
@ -104,17 +107,23 @@ enum netconn_type {
|
|||||||
NETCONN_UDP = 0x20,
|
NETCONN_UDP = 0x20,
|
||||||
NETCONN_UDPLITE = 0x21,
|
NETCONN_UDPLITE = 0x21,
|
||||||
NETCONN_UDPNOCHKSUM = 0x22,
|
NETCONN_UDPNOCHKSUM = 0x22,
|
||||||
|
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
NETCONN_UDP_IPV6 = NETCONN_UDP | NETCONN_TYPE_IPV6 /* 0x28 */,
|
NETCONN_UDP_IPV6 = NETCONN_UDP | NETCONN_TYPE_IPV6 /* 0x28 */,
|
||||||
NETCONN_UDPLITE_IPV6 = NETCONN_UDPLITE | NETCONN_TYPE_IPV6 /* 0x29 */,
|
NETCONN_UDPLITE_IPV6 = NETCONN_UDPLITE | NETCONN_TYPE_IPV6 /* 0x29 */,
|
||||||
NETCONN_UDPNOCHKSUM_IPV6 = NETCONN_UDPNOCHKSUM | NETCONN_TYPE_IPV6 /* 0x2a */,
|
NETCONN_UDPNOCHKSUM_IPV6 = NETCONN_UDPNOCHKSUM | NETCONN_TYPE_IPV6 /* 0x2a */,
|
||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
|
||||||
/* NETCONN_RAW Group */
|
/* NETCONN_RAW Group */
|
||||||
NETCONN_RAW = 0x40
|
NETCONN_RAW = 0x40,
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
,
|
NETCONN_RAW_IPV6 = NETCONN_RAW | NETCONN_TYPE_IPV6, /* 0x48 */
|
||||||
NETCONN_RAW_IPV6 = NETCONN_RAW | NETCONN_TYPE_IPV6 /* 0x48 */
|
|
||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
|
||||||
|
/* NETCONN dual stack */
|
||||||
|
/* NETCONN_TCP_IPANY = NETCONN_TCP | NETCONN_TYPE_IP_ANY, */ /* 0x14 */
|
||||||
|
NETCONN_UDP_IPANY = NETCONN_UDP | NETCONN_TYPE_IP_ANY /* 0x24 */
|
||||||
|
/* NETCONN_RAW_IPANY = NETCONN_RAW | NETCONN_TYPE_IP_ANY, */ /* 0x44 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Current state of the netconn. Non-TCP netconns are always
|
/** Current state of the netconn. Non-TCP netconns are always
|
||||||
|
Loading…
x
Reference in New Issue
Block a user