* Stores link-layer header for @ifp in format suitable for if_output() * into buffer @buf. Resulting header length is stored in @bufsize. * * Returns 0 on success. */
| 327 | * Returns 0 on success. |
| 328 | */ |
| 329 | static int |
| 330 | arp_fillheader(struct ifnet *ifp, struct arphdr *ah, int bcast, u_char *buf, |
| 331 | size_t *bufsize) |
| 332 | { |
| 333 | struct if_encap_req ereq; |
| 334 | int error; |
| 335 | |
| 336 | bzero(buf, *bufsize); |
| 337 | bzero(&ereq, sizeof(ereq)); |
| 338 | ereq.buf = buf; |
| 339 | ereq.bufsize = *bufsize; |
| 340 | ereq.rtype = IFENCAP_LL; |
| 341 | ereq.family = AF_ARP; |
| 342 | ereq.lladdr = ar_tha(ah); |
| 343 | ereq.hdata = (u_char *)ah; |
| 344 | if (bcast) |
| 345 | ereq.flags = IFENCAP_FLAG_BROADCAST; |
| 346 | error = ifp->if_requestencap(ifp, &ereq); |
| 347 | if (error == 0) |
| 348 | *bufsize = ereq.bufsize; |
| 349 | |
| 350 | return (error); |
| 351 | } |
| 352 | |
| 353 | /* |
| 354 | * Broadcast an ARP request. Caller specifies: |
no test coverage detected