|
Lines 146-152
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 146 |
struct ether_header *eh; |
146 |
struct ether_header *eh; |
| 147 |
struct arphdr *ah; |
147 |
struct arphdr *ah; |
| 148 |
uint16_t etype; |
148 |
uint16_t etype; |
| 149 |
const u_char *lladdr; |
149 |
const u_char *lladdr, *llsaddr; |
| 150 |
|
150 |
|
| 151 |
if (req->rtype != IFENCAP_LL) |
151 |
if (req->rtype != IFENCAP_LL) |
| 152 |
return (EOPNOTSUPP); |
152 |
return (EOPNOTSUPP); |
|
Lines 155-160
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 155 |
return (ENOMEM); |
155 |
return (ENOMEM); |
| 156 |
|
156 |
|
| 157 |
eh = (struct ether_header *)req->buf; |
157 |
eh = (struct ether_header *)req->buf; |
|
|
158 |
llsaddr = IF_LLADDR(ifp); |
| 158 |
lladdr = req->lladdr; |
159 |
lladdr = req->lladdr; |
| 159 |
req->lladdr_off = 0; |
160 |
req->lladdr_off = 0; |
| 160 |
|
161 |
|
|
Lines 180-186
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 180 |
etype = htons(ETHERTYPE_ARP); |
181 |
etype = htons(ETHERTYPE_ARP); |
| 181 |
break; |
182 |
break; |
| 182 |
} |
183 |
} |
| 183 |
|
184 |
#if defined(INET) |
|
|
185 |
/* Set CARP MAC as src ethernet address. */ |
| 186 |
if (ifp->if_carp) |
| 187 |
llsaddr = ar_sha(ah); |
| 188 |
#endif |
| 184 |
if (req->flags & IFENCAP_FLAG_BROADCAST) |
189 |
if (req->flags & IFENCAP_FLAG_BROADCAST) |
| 185 |
lladdr = ifp->if_broadcastaddr; |
190 |
lladdr = ifp->if_broadcastaddr; |
| 186 |
break; |
191 |
break; |
|
Lines 190-196
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 190 |
|
195 |
|
| 191 |
memcpy(&eh->ether_type, &etype, sizeof(eh->ether_type)); |
196 |
memcpy(&eh->ether_type, &etype, sizeof(eh->ether_type)); |
| 192 |
memcpy(eh->ether_dhost, lladdr, ETHER_ADDR_LEN); |
197 |
memcpy(eh->ether_dhost, lladdr, ETHER_ADDR_LEN); |
| 193 |
memcpy(eh->ether_shost, IF_LLADDR(ifp), ETHER_ADDR_LEN); |
198 |
memcpy(eh->ether_shost, llsaddr, ETHER_ADDR_LEN); |
| 194 |
req->bufsize = sizeof(struct ether_header); |
199 |
req->bufsize = sizeof(struct ether_header); |
| 195 |
|
200 |
|
| 196 |
return (0); |
201 |
return (0); |