From: Matthew Iselin <matt...@theiselins.net>

Signed-off-by: Matthew Iselin <matt...@theiselins.net>
---
 src/net/ndp.c |  103 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 52 insertions(+), 51 deletions(-)

diff --git a/src/net/ndp.c b/src/net/ndp.c
index 2781b9b..75002d9 100644
--- a/src/net/ndp.c
+++ b/src/net/ndp.c
@@ -169,58 +169,59 @@ int ndp_process_radvert ( struct io_buffer *iobuf, struct 
sockaddr_tcpip *st_src
        /* Parse options. */
        while ( offset < iob_len( iobuf ) ) {
        
-           switch ( options->type ) {
-           case NDP_OPTION_PREFIX_INFO:
-               {
-               struct prefix_option *opt = (struct prefix_option *) options;
-               
-               prefix_len = opt->prefix_len;
-               
-               if ( prefix_len % 8 ) {
-                       /* FIXME: non-aligned prefixes unhandled */
-                       DBG ( "ndp: prefix length is unaligned, connectivity 
may suffer.\n" );
-               }
-               
-               if ( prefix_len > 64 ) {
-                       /* > 64-bit prefix shouldn't happen. */
-                       DBG ( "ndp: prefix length is quite long, connectivity 
may suffer.\n" );
-               }
-               
-               /* Create an IPv6 address for this station based on the prefix. 
*/
-               ll_size = netdev->ll_protocol->ll_addr_len;
-               if ( ll_size < 6 ) {
-                       memcpy ( host_addr.s6_addr + (8 - ll_size), 
netdev->ll_addr, ll_size );
-               } else {
-                       /* Create an EUI-64 identifier. */
-                       memcpy( host_addr.s6_addr + 8, netdev->ll_addr, 3 );
-                       memcpy( host_addr.s6_addr + 8 + 5, netdev->ll_addr + 3, 
3 );
-                       host_addr.s6_addr[11] = 0xFF;
-                       host_addr.s6_addr[12] = 0xFE;
-               
-                       /* Designate that this is in fact an EUI-64. */
-                       host_addr.s6_addr[8] |= 0x2;
+               switch ( options->type ) {
+               case NDP_OPTION_PREFIX_INFO:
+                       {
+                       struct prefix_option *opt = (struct prefix_option *) 
options;
+
+                       prefix_len = opt->prefix_len;
+
+                       if ( prefix_len % 8 ) {
+                               /* FIXME: non-aligned prefixes unhandled */
+                               DBG ( "ndp: prefix length is unaligned, 
connectivity may suffer.\n" );
+                       }
+
+                       if ( prefix_len > 64 ) {
+                               /* > 64-bit prefix shouldn't happen. */
+                               DBG ( "ndp: prefix length is quite long, 
connectivity may suffer.\n" );
+                       }
+
+                       /* Create an IPv6 address for this station based on the 
prefix. */
+                       ll_size = netdev->ll_protocol->ll_addr_len;
+                       if ( ll_size < 6 ) {
+                               memcpy ( host_addr.s6_addr + (8 - ll_size), 
netdev->ll_addr, ll_size );
+                       } else {
+                               /* Create an EUI-64 identifier. */
+                               memcpy( host_addr.s6_addr + 8, netdev->ll_addr, 
3 );
+                               memcpy( host_addr.s6_addr + 8 + 5, 
netdev->ll_addr + 3, 3 );
+                               host_addr.s6_addr[11] = 0xFF;
+                               host_addr.s6_addr[12] = 0xFE;
+
+                               /* Designate that this is in fact an EUI-64. */
+                               host_addr.s6_addr[8] |= 0x2;
+                       }
+
+                       memcpy( &host_addr.s6_addr, opt->prefix, prefix_len / 8 
);
+
+                       rc = 0;
+                       }
+                       break;
+                       
+               case NDP_OPTION_SOURCE_LL:
+                       {
+                       struct ll_option *opt = (struct ll_option *) options;
+
+                       /* Add entry in the neighbour cache for the router */
+                       if ( ! ndp_find_entry ( &router_addr ) ) {
+                               add_ndp_entry ( netdev, &router_addr, 
opt->address, NDP_STATE_REACHABLE );
+                       }
+
+                       }
+                       break;
                }
                
-               memcpy( &host_addr.s6_addr, opt->prefix, prefix_len / 8 );
-               
-               rc = 0;
-               }
-               break;
-       case NDP_OPTION_SOURCE_LL:
-               {
-               struct ll_option *opt = (struct ll_option *) options;
-               
-               /* Add entry in the neighbour cache for the router */
-               if ( ! ndp_find_entry ( &router_addr ) ) {
-                       add_ndp_entry ( netdev, &router_addr, opt->address, 
NDP_STATE_REACHABLE );
-               }
-               
-               }
-               break;
-           }
-       
-           offset += options->length * 8;
-           options = (struct ndp_option *) (iobuf->data + offset);
+               offset += options->length * 8;
+               options = (struct ndp_option *) (iobuf->data + offset);
        }
        
        if ( rc ) {
@@ -230,7 +231,7 @@ int ndp_process_radvert ( struct io_buffer *iobuf, struct 
sockaddr_tcpip *st_src
        
        /* Configure a route based on this router if none exists. */
        if ( net_protocol->check ( netdev, &host_addr ) ) {
-               DBG ( "ndp: autoconfigured %s/%d via a router advertisement\n", 
inet6_ntoa( host_addr ), prefix_len);
+               DBG ( "ndp: autoconfigured %s/%d via a router advertisement\n", 
inet6_ntoa( host_addr ), prefix_len);
                
                add_ipv6_address ( netdev, host_addr, prefix_len, host_addr, 
router_addr );
        }
-- 
1.7.2.5

_______________________________________________
gPXE-devel mailing list
gPXE-devel@etherboot.org
http://etherboot.org/mailman/listinfo/gpxe-devel

Reply via email to