mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-09-25 10:13:40 +08:00
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 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 calling version-related functions
This commit is contained in:
@@ -181,7 +181,7 @@ const struct protent* const protocols[] = {
|
||||
/* Prototypes for procedures local to this file. */
|
||||
static void ppp_do_connect(void *arg);
|
||||
static err_t ppp_netif_init_cb(struct netif *netif);
|
||||
static err_t ppp_netif_output_ip4(struct netif *netif, struct pbuf *pb, const ip_addr_t *ipaddr);
|
||||
static err_t ppp_netif_output_ip4(struct netif *netif, struct pbuf *pb, const ip4_addr_t *ipaddr);
|
||||
#if PPP_IPV6_SUPPORT
|
||||
static err_t ppp_netif_output_ip6(struct netif *netif, struct pbuf *pb, const ip6_addr_t *ipaddr);
|
||||
#endif /* PPP_IPV6_SUPPORT */
|
||||
@@ -426,7 +426,7 @@ static err_t ppp_netif_init_cb(struct netif *netif) {
|
||||
/*
|
||||
* Send an IPv4 packet on the given connection.
|
||||
*/
|
||||
static err_t ppp_netif_output_ip4(struct netif *netif, struct pbuf *pb, const ip_addr_t *ipaddr) {
|
||||
static err_t ppp_netif_output_ip4(struct netif *netif, struct pbuf *pb, const ip4_addr_t *ipaddr) {
|
||||
#if PPP_IPV4_SUPPORT
|
||||
ppp_pcb *pcb = (ppp_pcb*)netif->state;
|
||||
LWIP_UNUSED_ARG(ipaddr);
|
||||
@@ -556,7 +556,7 @@ ppp_pcb *ppp_new(struct netif *pppif, ppp_link_status_cb_fn link_status_cb, void
|
||||
pcb->settings.fsm_max_nak_loops = FSM_DEFMAXNAKLOOPS;
|
||||
|
||||
pcb->netif = pppif;
|
||||
if (!netif_add(pcb->netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY,
|
||||
if (!netif_add(pcb->netif, IP4_ADDR_ANY, IP4_ADDR_BROADCAST, IP4_ADDR_ANY,
|
||||
(void *)pcb, ppp_netif_init_cb, NULL)) {
|
||||
memp_free(MEMP_PPP_PCB, pcb);
|
||||
PPPDEBUG(LOG_ERR, ("ppp_new: netif_add failed\n"));
|
||||
@@ -861,7 +861,7 @@ int ppp_recv_config(ppp_pcb *pcb, int mru, u32_t accm, int pcomp, int accomp) {
|
||||
* sifaddr - Config the interface IP addresses and netmask.
|
||||
*/
|
||||
int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask) {
|
||||
ip_addr_t ip, nm, gw;
|
||||
ip4_addr_t ip, nm, gw;
|
||||
|
||||
ip4_addr_set_u32(&ip, our_adr);
|
||||
ip4_addr_set_u32(&nm, netmask);
|
||||
@@ -879,7 +879,7 @@ int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr) {
|
||||
LWIP_UNUSED_ARG(our_adr);
|
||||
LWIP_UNUSED_ARG(his_adr);
|
||||
|
||||
netif_set_addr(pcb->netif, IP_ADDR_ANY, IP_ADDR_BROADCAST, IP_ADDR_ANY);
|
||||
netif_set_addr(pcb->netif, IP4_ADDR_ANY, IP4_ADDR_BROADCAST, IP4_ADDR_ANY);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -915,9 +915,9 @@ int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2) {
|
||||
ip_addr_t ns;
|
||||
LWIP_UNUSED_ARG(pcb);
|
||||
|
||||
ip4_addr_set_u32(&ns, ns1);
|
||||
ip_addr_set_ip4_u32(&ns, ns1);
|
||||
dns_setserver(0, &ns);
|
||||
ip4_addr_set_u32(&ns, ns2);
|
||||
ip_addr_set_ip4_u32(&ns, ns2);
|
||||
dns_setserver(1, &ns);
|
||||
return 1;
|
||||
}
|
||||
@@ -931,12 +931,12 @@ int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2) {
|
||||
LWIP_UNUSED_ARG(pcb);
|
||||
|
||||
nsa = dns_getserver(0);
|
||||
ip4_addr_set_u32(&nsb, ns1);
|
||||
ip_addr_set_ip4_u32(&nsb, ns1);
|
||||
if (ip_addr_cmp(&nsa, &nsb)) {
|
||||
dns_setserver(0, (ip_addr_t*)IP_ADDR_ANY);
|
||||
}
|
||||
nsa = dns_getserver(1);
|
||||
ip4_addr_set_u32(&nsb, ns2);
|
||||
ip_addr_set_ip4_u32(&nsb, ns2);
|
||||
if (ip_addr_cmp(&nsa, &nsb)) {
|
||||
dns_setserver(1, (ip_addr_t*)IP_ADDR_ANY);
|
||||
}
|
||||
|
||||
@@ -82,10 +82,7 @@ static err_t pppol2tp_connect(ppp_pcb *ppp, void *ctx); /* Be a LAC, connect
|
||||
static void pppol2tp_disconnect(ppp_pcb *ppp, void *ctx); /* Disconnect */
|
||||
|
||||
/* Prototypes for procedures local to this file. */
|
||||
static void pppol2tp_input_ip4(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
|
||||
#if LWIP_IPV6
|
||||
static void pppol2tp_input_ip6(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip6_addr_t *addr, u16_t port);
|
||||
#endif /* LWIP_IPV6 */
|
||||
static void pppol2tp_input_ip(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
|
||||
static void pppol2tp_input(pppol2tp_pcb *l2tp, struct pbuf *p, u16_t port);
|
||||
static void pppol2tp_dispatch_control_packet(pppol2tp_pcb *l2tp, u16_t port, struct pbuf *p, u16_t ns, u16_t nr);
|
||||
static void pppol2tp_timeout(void *arg);
|
||||
@@ -122,7 +119,7 @@ static const struct link_callbacks pppol2tp_callbacks = {
|
||||
|
||||
/* Create a new L2TP session. */
|
||||
ppp_pcb *pppol2tp_create(struct netif *pppif,
|
||||
struct netif *netif, ip_addr_t *ipaddr, u16_t port,
|
||||
struct netif *netif, ip4_addr_t *ipaddr, u16_t port,
|
||||
u8_t *secret, u8_t secret_len,
|
||||
ppp_link_status_cb_fn link_status_cb, void *ctx_cb) {
|
||||
ppp_pcb *ppp;
|
||||
@@ -146,14 +143,18 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
|
||||
ppp_free(ppp);
|
||||
return NULL;
|
||||
}
|
||||
udp_recv(udp, pppol2tp_input_ip4, l2tp);
|
||||
udp_recv(udp, pppol2tp_input_ip, l2tp);
|
||||
|
||||
memset(l2tp, 0, sizeof(pppol2tp_pcb));
|
||||
l2tp->phase = PPPOL2TP_STATE_INITIAL;
|
||||
l2tp->ppp = ppp;
|
||||
l2tp->udp = udp;
|
||||
l2tp->netif = netif;
|
||||
ip_addr_set(ipX_2_ip(&l2tp->remote_ip), ipaddr);
|
||||
if (ipaddr) {
|
||||
ip_addr_copy_from_ip4(l2tp->remote_ip, *ipaddr);
|
||||
} else {
|
||||
ip_addr_set_any(0, &l2tp->remote_ip);
|
||||
}
|
||||
l2tp->remote_port = port;
|
||||
#if PPPOL2TP_AUTH_SUPPORT
|
||||
l2tp->secret = secret;
|
||||
@@ -191,14 +192,18 @@ ppp_pcb *pppol2tp_create_ip6(struct netif *pppif,
|
||||
ppp_free(ppp);
|
||||
return NULL;
|
||||
}
|
||||
udp_recv_ip6(udp, pppol2tp_input_ip6, l2tp);
|
||||
udp_recv(udp, pppol2tp_input_ip, l2tp);
|
||||
|
||||
memset(l2tp, 0, sizeof(pppol2tp_pcb));
|
||||
l2tp->phase = PPPOL2TP_STATE_INITIAL;
|
||||
l2tp->ppp = ppp;
|
||||
l2tp->udp = udp;
|
||||
l2tp->netif = netif;
|
||||
ip6_addr_set(&l2tp->remote_ip.ip6, ip6addr);
|
||||
if (ip6addr) {
|
||||
ip_addr_copy_from_ip6(l2tp->remote_ip, *ip6addr);
|
||||
} else {
|
||||
ip_addr_set_any(1, &l2tp->remote_ip);
|
||||
}
|
||||
l2tp->remote_port = port;
|
||||
#if PPPOL2TP_AUTH_SUPPORT
|
||||
l2tp->secret = secret;
|
||||
@@ -351,7 +356,7 @@ static err_t pppol2tp_connect(ppp_pcb *ppp, void *ctx) {
|
||||
*/
|
||||
#if LWIP_IPV6
|
||||
if (PCB_ISIPV6(l2tp->udp)) {
|
||||
udp_bind_ip6(l2tp->udp, IP6_ADDR_ANY, 0);
|
||||
udp_bind(l2tp->udp, IP6_ADDR_ANY, 0);
|
||||
} else
|
||||
#endif /* LWIP_IPV6 */
|
||||
udp_bind(l2tp->udp, IP_ADDR_ANY, 0);
|
||||
@@ -392,7 +397,7 @@ static void pppol2tp_disconnect(ppp_pcb *ppp, void *ctx) {
|
||||
}
|
||||
|
||||
/* UDP Callback for incoming IPv4 L2TP frames */
|
||||
static void pppol2tp_input_ip4(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) {
|
||||
static void pppol2tp_input_ip(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) {
|
||||
pppol2tp_pcb *l2tp = (pppol2tp_pcb*)arg;
|
||||
LWIP_UNUSED_ARG(pcb);
|
||||
|
||||
@@ -400,7 +405,7 @@ static void pppol2tp_input_ip4(void *arg, struct udp_pcb *pcb, struct pbuf *p, c
|
||||
goto free_and_return;
|
||||
}
|
||||
|
||||
if (!ip_addr_cmp(ipX_2_ip(&l2tp->remote_ip), addr)) {
|
||||
if (!ip_addr_cmp(&l2tp->remote_ip, addr)) {
|
||||
goto free_and_return;
|
||||
}
|
||||
|
||||
@@ -411,28 +416,6 @@ free_and_return:
|
||||
pbuf_free(p);
|
||||
}
|
||||
|
||||
#if LWIP_IPV6
|
||||
/* UDP Callback for incoming IPv6 L2TP frames */
|
||||
static void pppol2tp_input_ip6(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip6_addr_t *addr, u16_t port) {
|
||||
pppol2tp_pcb *l2tp = (pppol2tp_pcb*)arg;
|
||||
LWIP_UNUSED_ARG(pcb);
|
||||
|
||||
if (l2tp->phase < PPPOL2TP_STATE_SCCRQ_SENT) {
|
||||
goto free_and_return;
|
||||
}
|
||||
|
||||
if (!ip6_addr_cmp(&l2tp->remote_ip.ip6, addr)) {
|
||||
goto free_and_return;
|
||||
}
|
||||
|
||||
pppol2tp_input(l2tp, p, port);
|
||||
return;
|
||||
|
||||
free_and_return:
|
||||
pbuf_free(p);
|
||||
}
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
static void pppol2tp_input(pppol2tp_pcb *l2tp, struct pbuf *p, u16_t port) {
|
||||
u16_t hflags, hlen, len=0, tunnel_id=0, session_id=0, ns=0, nr=0, offset=0;
|
||||
u8_t *inp;
|
||||
@@ -1215,19 +1198,10 @@ static err_t pppol2tp_xmit(pppol2tp_pcb *l2tp, struct pbuf *pb) {
|
||||
|
||||
static err_t pppol2tp_udp_send(pppol2tp_pcb *l2tp, struct pbuf *pb) {
|
||||
err_t err;
|
||||
#if LWIP_IPV6
|
||||
if (PCB_ISIPV6(l2tp->udp)) {
|
||||
if (l2tp->netif) {
|
||||
err = udp_sendto_if_ip6(l2tp->udp, pb, &l2tp->remote_ip.ip6, l2tp->tunnel_port, l2tp->netif);
|
||||
} else {
|
||||
err = udp_sendto_ip6(l2tp->udp, pb, &l2tp->remote_ip.ip6, l2tp->tunnel_port);
|
||||
}
|
||||
} else
|
||||
#endif /* LWIP_IPV6 */
|
||||
if (l2tp->netif) {
|
||||
err = udp_sendto_if(l2tp->udp, pb, ipX_2_ip(&l2tp->remote_ip), l2tp->tunnel_port, l2tp->netif);
|
||||
err = udp_sendto_if(l2tp->udp, pb, &l2tp->remote_ip, l2tp->tunnel_port, l2tp->netif);
|
||||
} else {
|
||||
err = udp_sendto(l2tp->udp, pb, ipX_2_ip(&l2tp->remote_ip), l2tp->tunnel_port);
|
||||
err = udp_sendto(l2tp->udp, pb, &l2tp->remote_ip, l2tp->tunnel_port);
|
||||
}
|
||||
pbuf_free(pb);
|
||||
return err;
|
||||
|
||||
@@ -216,6 +216,7 @@ pppos_write(ppp_pcb *ppp, void *ctx, struct pbuf *p)
|
||||
u16_t n;
|
||||
u16_t fcs_out;
|
||||
err_t err;
|
||||
LWIP_UNUSED_ARG(ppp);
|
||||
|
||||
/* Grab an output buffer. */
|
||||
nb = pbuf_alloc(PBUF_RAW, 0, PBUF_POOL);
|
||||
@@ -261,6 +262,7 @@ pppos_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u16_t protocol)
|
||||
struct pbuf *nb, *p;
|
||||
u16_t fcs_out;
|
||||
err_t err;
|
||||
LWIP_UNUSED_ARG(ppp);
|
||||
|
||||
#if VJ_SUPPORT
|
||||
/*
|
||||
|
||||
@@ -172,8 +172,8 @@ vj_compress_tcp(struct vjcompress *comp, struct pbuf *pb)
|
||||
* again & we don't have to do any reordering if it's used.
|
||||
*/
|
||||
INCR(vjs_packets);
|
||||
if (!ip_addr_cmp(&ip->src, &cs->cs_ip.src)
|
||||
|| !ip_addr_cmp(&ip->dest, &cs->cs_ip.dest)
|
||||
if (!ip4_addr_cmp(&ip->src, &cs->cs_ip.src)
|
||||
|| !ip4_addr_cmp(&ip->dest, &cs->cs_ip.dest)
|
||||
|| *(long *)th != ((long *)&cs->cs_ip)[IPH_HL(&cs->cs_ip)]) {
|
||||
/*
|
||||
* Wasn't the first -- search for it.
|
||||
@@ -193,8 +193,8 @@ vj_compress_tcp(struct vjcompress *comp, struct pbuf *pb)
|
||||
do {
|
||||
lcs = cs; cs = cs->cs_next;
|
||||
INCR(vjs_searches);
|
||||
if (ip_addr_cmp(&ip->src, &cs->cs_ip.src)
|
||||
&& ip_addr_cmp(&ip->dest, &cs->cs_ip.dest)
|
||||
if (ip4_addr_cmp(&ip->src, &cs->cs_ip.src)
|
||||
&& ip4_addr_cmp(&ip->dest, &cs->cs_ip.dest)
|
||||
&& *(long *)th == ((long *)&cs->cs_ip)[IPH_HL(&cs->cs_ip)]) {
|
||||
goto found;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user