File tree 1 file changed +8
-3
lines changed
1 file changed +8
-3
lines changed Original file line number Diff line number Diff line change @@ -571,8 +571,13 @@ static struct safe_buffer_list *add_ra_options_route(struct safe_buffer_list *sb
571
571
memset (& rinfo , 0 , sizeof (rinfo ));
572
572
573
573
rinfo .nd_opt_ri_type = ND_OPT_ROUTE_INFORMATION ;
574
- /* XXX: the prefixes are allowed to be sent in smaller chunks as well */
575
- rinfo .nd_opt_ri_len = 3 ;
574
+ if (route -> PrefixLen == 0 ) {
575
+ rinfo .nd_opt_ri_len = 1 ;
576
+ } else if (route -> PrefixLen > 0 && route -> PrefixLen <= 64 ) {
577
+ rinfo .nd_opt_ri_len = 2 ;
578
+ } else if (route -> PrefixLen > 64 && route -> PrefixLen <= 128 ) {
579
+ rinfo .nd_opt_ri_len = 3 ;
580
+ }
576
581
rinfo .nd_opt_ri_prefix_len = route -> PrefixLen ;
577
582
578
583
rinfo .nd_opt_ri_flags_reserved = (route -> AdvRoutePreference << ND_OPT_RI_PRF_SHIFT ) & ND_OPT_RI_PRF_MASK ;
@@ -585,7 +590,7 @@ static struct safe_buffer_list *add_ra_options_route(struct safe_buffer_list *sb
585
590
memcpy (& rinfo .nd_opt_ri_prefix , & route -> Prefix , sizeof (struct in6_addr ));
586
591
587
592
sbl = safe_buffer_list_append (sbl );
588
- safe_buffer_append (sbl -> sb , & rinfo , sizeof ( rinfo ) );
593
+ safe_buffer_append (sbl -> sb , & rinfo , rinfo . nd_opt_ri_len * 8 );
589
594
590
595
route = route -> next ;
591
596
}
You can’t perform that action at this time.
0 commit comments