Esempio n. 1
0
char* sr_find_next_hop(struct sr_instance* sr, uint32_t dest)
{
    struct sr_rt* rt_walker = 0;
    struct sr_rt* next_hop = 0;
    int max_prefix = 0;
    int temp = 0;

    if(sr->routing_table == 0)
    {
        printf(" *warning* Routing table empty \n");
        return 0;
    }

    rt_walker = sr->routing_table;
    
    while(rt_walker)
    {
        sr_print_routing_entry(rt_walker);
	temp = prefix_match(ntohl((rt_walker->dest).s_addr),
			    ntohl(dest),
			    ntohl((rt_walker->mask).s_addr));
	printf("%d\n", temp);
	if (temp > max_prefix)
	{
	    next_hop = rt_walker;
	    max_prefix = temp;
	}
        rt_walker = rt_walker->next; 
    }
    if (!next_hop)
	return 0;
    printf("find a interface=%s\n",next_hop->interface);
    return next_hop->interface;
}
Esempio n. 2
0
void sr_print_routing_table(struct sr_instance* sr)
{
    struct sr_rt* rt_walker = 0;

    if(sr->routing_table == 0)
    {
        fprintf(stderr," *warning* Routing table empty \n");
        return;
    }

    fprintf(stderr,"Destination\tGateway\t\tMask\tIface\n");

    rt_walker = sr->routing_table;
    
    sr_print_routing_entry(rt_walker);
    while(rt_walker->next)
    {
        rt_walker = rt_walker->next; 
        sr_print_routing_entry(rt_walker);
    }

} /* -- sr_print_routing_table -- */