more cleanup prework to fix bug #45029

This commit is contained in:
sg 2015-08-24 22:46:34 +02:00
parent 7754f96549
commit 94550682d7
5 changed files with 13 additions and 16 deletions

View File

@ -761,10 +761,9 @@ nd6_tmr(void)
for (j = 1; j < LWIP_IPV6_NUM_ADDRESSES; j++) {
if (netif_ip6_addr_state(prefix_list[i].netif, j) == IP6_ADDR_INVALID) {
/* Generate an address using this prefix and interface ID from link-local address. */
prefix_list[i].netif->ip6_addr[j].addr[0] = prefix_list[i].prefix.addr[0];
prefix_list[i].netif->ip6_addr[j].addr[1] = prefix_list[i].prefix.addr[1];
prefix_list[i].netif->ip6_addr[j].addr[2] = prefix_list[i].netif->ip6_addr[0].addr[2];
prefix_list[i].netif->ip6_addr[j].addr[3] = prefix_list[i].netif->ip6_addr[0].addr[3];
IP6_ADDR(&prefix_list[i].netif->ip6_addr[j],
prefix_list[i].prefix.addr[0], prefix_list[i].prefix.addr[1],
netif_ip6_addr(prefix_list[i].netif, 0)->addr[2], netif_ip6_addr(prefix_list[i].netif, 0)->addr[3]);
/* Mark it as tentative (DAD will be performed if configured). */
netif_ip6_addr_set_state(prefix_list[i].netif, j, IP6_ADDR_TENTATIVE);

View File

@ -152,10 +152,7 @@ netif_init(void)
#endif /* NO_SYS */
#if LWIP_IPV6
loop_netif.ip6_addr[0].addr[0] = 0;
loop_netif.ip6_addr[0].addr[1] = 0;
loop_netif.ip6_addr[0].addr[2] = 0;
loop_netif.ip6_addr[0].addr[3] = PP_HTONL(0x00000001UL);
IP6_ADDR(loop_netif.ip6_addr, 0, 0, 0, PP_HTONL(0x00000001UL));
loop_netif.ip6_addr_state[0] = IP6_ADDR_VALID;
#endif /* LWIP_IPV6 */

View File

@ -107,6 +107,8 @@ static ip4_addr_t* ip_2_ip4(const ip_addr_t *ipaddr)
ip4_addr_set(ip_2_ip4(dest), ip_2_ip4(src)); IP_SET_TYPE(dest, IPADDR_TYPE_V4); }}while(0)
#define ip_addr_set_zero(ipaddr) do{ \
ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, 0); }while(0)
#define ip_addr_set_zero_ip6(ipaddr) do{ \
ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }while(0)
#define ip_addr_set_any(is_ipv6, ipaddr) do{if(is_ipv6){ \
ip6_addr_set_any(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \
ip4_addr_set_any(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }}while(0)
@ -213,6 +215,7 @@ typedef ip6_addr_t ip_addr_t;
#define ip_addr_set(dest, src) ip6_addr_set(dest, src)
#define ip_addr_set_ipaddr(dest, src) ip6_addr_set(dest, src)
#define ip_addr_set_zero(ipaddr) ip6_addr_set_zero(ipaddr)
#define ip_addr_set_zero_ip6(ipaddr) ip6_addr_set_zero(ipaddr)
#define ip_addr_set_any(is_ipv6, ipaddr) ip6_addr_set_any(ipaddr)
#define ip_addr_set_loopback(is_ipv6, ipaddr) ip6_addr_set_loopback(ipaddr)
#define ip_addr_set_hton(dest, src) ip6_addr_set_hton(dest, src)

View File

@ -342,6 +342,9 @@ void netif_set_default(struct netif *netif);
void netif_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr);
void netif_set_netmask(struct netif *netif, const ip4_addr_t *netmask);
void netif_set_gw(struct netif *netif, const ip4_addr_t *gw);
#define netif_ip4_addr(netif) (&((netif)->ip_addr))
#define netif_ip4_netmask(netif) (&((netif)->netmask))
#define netif_ip4_gw(netif) (&((netif)->gw))
#endif /* LWIP_IPV4 */
void netif_set_up(struct netif *netif);
@ -388,14 +391,9 @@ void netif_poll_all(void);
#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */
#endif /* ENABLE_LOOPBACK */
#if LWIP_IPV4
#define netif_ip4_addr(netif) (&((netif)->ip_addr))
#define netif_ip4_netmask(netif) (&((netif)->netmask))
#define netif_ip4_gw(netif) (&((netif)->gw))
#endif /* LWIP_IPV4 */
#if LWIP_IPV6
#define netif_ip6_addr(netif, i) (&((netif)->ip6_addr[(i)]))
#define netif_ip6_addr_set(netif, i, addr6) ip6_addr_set(&((netif)->ip6_addr[(i)]), addr6)
#define netif_ip6_addr_state(netif, i) ((netif)->ip6_addr_state[(i)])
#define netif_ip6_addr_set_state(netif, i, state) ((netif)->ip6_addr_state[(i)] = (state))
s8_t netif_get_ip6_addr_match(struct netif *netif, ip6_addr_t *ip6addr);

View File

@ -1209,7 +1209,7 @@ int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) {
LWIP_UNUSED_ARG(his_eui64);
IN6_LLADDR_FROM_EUI64(ip6, our_eui64);
ip6_addr_copy(pcb->netif->ip6_addr[0], ip6);
netif_ip6_addr_set(pcb->netif, 0, &ip6);
netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_PREFERRED);
/* FIXME: should we add an IPv6 static neighbor using his_eui64 ? */
return 1;
@ -1223,8 +1223,8 @@ int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) {
LWIP_UNUSED_ARG(our_eui64);
LWIP_UNUSED_ARG(his_eui64);
netif_ip6_addr_set(pcb->netif, 0, IP6_ADDR_ANY6);
netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_INVALID);
ip6_addr_set_zero(&pcb->netif->ip6_addr[0]);
return 1;
}