> +#define tracker_packet_for_each_dest(mcast_entry, dest_entry, mcast_num, 
> dest_num, tracker_packet) \
> +     for (mcast_num = 0, mcast_entry = (struct mcast_entry *)(tracker_packet 
> + 1), \
> +          dest_entry = (uint8_t *)(mcast_entry + 1); \
> +          mcast_num < tracker_packet->num_mcast_entries; mcast_num++, \
> +          mcast_entry = (struct mcast_entry *)dest_entry, \
> +          dest_entry = (uint8_t *)(mcast_entry + 1)) \
> +             for (dest_num = 0; dest_num < mcast_entry->num_dest; 
> dest_num++, \
> +                  dest_entry += ETH_ALEN)

It is probably not a good idea to have nested for loops inside a macro
like this. What happens with code like:

     tracker_packet_for_each_dest(mcast_entry, dest_entry, mcast_num, dest_num, 
tracker_packet) {
         ...         
         ...
         if (foo == bar)
             break;

         if (foo)
            continue;
     
These don't do what you would expect.

      Andrew

Reply via email to