Re: [B.A.T.M.A.N.] [RFC 2/5] batman-adv: ELP - creating neighbor structures, updating LQs

Marek Lindner
2012-04-05T19:59:38Z

On Friday, March 23, 2012 22:52:12 Andrew Lunn wrote:
> > +/* extract my own tq to neighbor from the elp packet */
> > +static uint8_t bat_v_elp_fetch_tq(uint8_t *my_iface_addr,
> > + struct batman_elp_packet *elp_packet,
> > + int elp_packet_len)
> > +{
> > + struct elp_neigh_entry *elp_neigh_entry;
> > + uint8_t tq = 0;
> > + int i;
> > +
> > + elp_neigh_entry = (struct elp_neigh_entry *)(elp_packet + 1);
> > + elp_packet_len -= BATMAN_ELP_HLEN;
> > +
> > + for (i = 0; i < elp_packet->num_neighbors; i++) {
> > + if (!compare_eth(my_iface_addr, elp_neigh_entry->addr))
> > + goto next;
> > +
> > + tq = elp_neigh_entry->rq;
> > + break;
> > +
> > + next:
> > + elp_packet_len -= sizeof(struct elp_neigh_entry);
> > + if (elp_packet_len < 0)
> > + break;
> > +
> > + elp_neigh_entry++;
> > + }
>

> I'm personally not a fan of using goto like this. Reminds me of BASIC.
>
> Could this be changed? Maybe first validate elp_packet->num_neighbors
> matches the packet length, and then skip elp_packet_len check in each
> iteration of the loop. A normal if then else should then be possible.

Something like this ?

elp_packet_len -= BATMAN_ELP_HLEN;
elp_packet_len -= elp_packet->num_neighbors * sizeof(struct elp_neigh_entry;
if (elp_packet_len < 0)
return;

Cheers,
Marek