/* set up the token header */
trh = (struct trh_hdr *) &buf[*bufix];
- if (interface -> hw_address.hlen == sizeof (trh->saddr))
- memcpy (trh->saddr, interface -> hw_address.haddr,
+ if (interface -> hw_address.hlen - 1 == sizeof (trh->saddr))
+ memcpy (trh->saddr, &interface -> hw_address.hbuf [1],
sizeof (trh->saddr));
else
memset (trh->saddr, 0x00, sizeof (trh->saddr));
- if (to && to -> hlen == 6) /* XXX */
- memcpy (trh->daddr, to -> haddr, sizeof trh->daddr);
+ if (to && to -> hlen == 7) /* XXX */
+ memcpy (trh->daddr, &to -> hbuf [1], sizeof trh->daddr);
else
memset (trh->daddr, 0xff, sizeof (trh->daddr));
}
/* no entry found, so create one */
- rover = malloc(sizeof(struct routing_entry));
+ rover = dmalloc (sizeof (struct routing_entry), MDL);
if (rover == NULL) {
fprintf(stderr,
"%s: unable to save source routing information\n",
while((rover = *prover) != NULL) {
if ((now.tv_sec - rover->access_time) > routing_timeout) {
*prover = rover->next;
- free(rover);
+ dfree (rover, MDL);
} else
prover = &rover->next;
}