From: Matthew Iselin <matt...@theiselins.net> Signed-off-by: Matthew Iselin <matt...@theiselins.net> --- src/net/ipv6.c | 6 +++--- src/usr/ip6mgmt.c | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/net/ipv6.c b/src/net/ipv6.c index 5ce4e1a..9925435 100644 --- a/src/net/ipv6.c +++ b/src/net/ipv6.c @@ -49,7 +49,7 @@ static LIST_HEAD ( miniroutes ); * Add IPv6 minirouting table entry * * @v netdev Network device - * @v prefix Destination prefix + * @v prefix Destination prefix (in bits) * @v address Address of the interface * @v gateway Gateway address (or ::0 for no gateway) * @ret miniroute Routing table entry, or NULL @@ -60,7 +60,7 @@ add_ipv6_miniroute ( struct net_device *netdev, struct in6_addr prefix, struct in6_addr gateway ) { struct ipv6_miniroute *miniroute; - DBG("ipv6 add: %s/%d ", inet6_ntoa(address), prefix_len * 8); + DBG("ipv6 add: %s/%d ", inet6_ntoa(address), prefix_len); DBG("gw %s\n", inet6_ntoa(gateway)); miniroute = malloc ( sizeof ( *miniroute ) ); @@ -91,7 +91,7 @@ add_ipv6_miniroute ( struct net_device *netdev, struct in6_addr prefix, static void del_ipv6_miniroute ( struct ipv6_miniroute *miniroute ) { DBG("ipv6 del: %s/%d\n", inet6_ntoa(miniroute->address), - miniroute->prefix_len * 8); + miniroute->prefix_len); netdev_put ( miniroute->netdev ); list_del ( &miniroute->list ); diff --git a/src/usr/ip6mgmt.c b/src/usr/ip6mgmt.c index 0809c7b..f0b69d4 100644 --- a/src/usr/ip6mgmt.c +++ b/src/usr/ip6mgmt.c @@ -34,8 +34,8 @@ FILE_LICENCE ( GPL2_OR_LATER ); /* Maximum length of the link-layer address we'll insert as an EUI-64. */ #define AUTOCONF_LL_MAX 6 -int ip6_autoconf ( struct net_device *netdev __unused ) { - struct in6_addr ip6addr; +int ip6_autoconf ( struct net_device *netdev ) { + struct in6_addr ip6addr, ip6zero; size_t ll_size; int rc; @@ -50,6 +50,7 @@ int ip6_autoconf ( struct net_device *netdev __unused ) { /* Create the host ID part of the IPv6 address from the Link-Layer * address on the netdevice. */ memset ( &ip6addr, 0, sizeof (struct in6_addr) ); + memset ( &ip6zero, 0, sizeof (struct in6_addr) ); ll_size = netdev->ll_protocol->ll_addr_len; if ( ll_size < 6 ) { @@ -69,7 +70,13 @@ int ip6_autoconf ( struct net_device *netdev __unused ) { ip6addr.s6_addr[0] = 0xFE; ip6addr.s6_addr[1] = 0x80; - DBG( "ip6 autoconfig address is %s\n", inet6_ntoa(ip6addr) ); + /* TODO: send a few neighbour solicits on this address before we take + * it (once NDP is implemented). */ + + DBG( "ipv6 autoconfig address is %s\n", inet6_ntoa(ip6addr) ); + + /* Add as a route. */ + add_ipv6_address ( netdev, ip6addr, 10, ip6addr, ip6zero ); return 0; } -- 1.7.2.5 _______________________________________________ gPXE-devel mailing list gPXE-devel@etherboot.org http://etherboot.org/mailman/listinfo/gpxe-devel