|
Lines 97-102
CTASSERT(sizeof (struct ether_addr) == ETHER_ADDR_LEN);
Link Here
|
| 97 |
|
97 |
|
| 98 |
VNET_DEFINE(pfil_head_t, link_pfil_head); /* Packet filter hooks */ |
98 |
VNET_DEFINE(pfil_head_t, link_pfil_head); /* Packet filter hooks */ |
| 99 |
|
99 |
|
|
|
100 |
#ifdef INET |
| 101 |
VNET_DECLARE(bool, use_carp_src_mac_in_arp); |
| 102 |
#define V_use_carp_src_mac VNET(use_carp_src_mac_in_arp) |
| 103 |
#endif |
| 104 |
|
| 100 |
/* netgraph node hooks for ng_ether(4) */ |
105 |
/* netgraph node hooks for ng_ether(4) */ |
| 101 |
void (*ng_ether_input_p)(struct ifnet *ifp, struct mbuf **mp); |
106 |
void (*ng_ether_input_p)(struct ifnet *ifp, struct mbuf **mp); |
| 102 |
void (*ng_ether_input_orphan_p)(struct ifnet *ifp, struct mbuf *m); |
107 |
void (*ng_ether_input_orphan_p)(struct ifnet *ifp, struct mbuf *m); |
|
Lines 146-152
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 146 |
struct ether_header *eh; |
151 |
struct ether_header *eh; |
| 147 |
struct arphdr *ah; |
152 |
struct arphdr *ah; |
| 148 |
uint16_t etype; |
153 |
uint16_t etype; |
| 149 |
const u_char *lladdr; |
154 |
const u_char *lladdr, *llsaddr; |
| 150 |
|
155 |
|
| 151 |
if (req->rtype != IFENCAP_LL) |
156 |
if (req->rtype != IFENCAP_LL) |
| 152 |
return (EOPNOTSUPP); |
157 |
return (EOPNOTSUPP); |
|
Lines 155-160
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 155 |
return (ENOMEM); |
160 |
return (ENOMEM); |
| 156 |
|
161 |
|
| 157 |
eh = (struct ether_header *)req->buf; |
162 |
eh = (struct ether_header *)req->buf; |
|
|
163 |
llsaddr = IF_LLADDR(ifp); |
| 158 |
lladdr = req->lladdr; |
164 |
lladdr = req->lladdr; |
| 159 |
req->lladdr_off = 0; |
165 |
req->lladdr_off = 0; |
| 160 |
|
166 |
|
|
Lines 180-186
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 180 |
etype = htons(ETHERTYPE_ARP); |
186 |
etype = htons(ETHERTYPE_ARP); |
| 181 |
break; |
187 |
break; |
| 182 |
} |
188 |
} |
| 183 |
|
189 |
#ifdef INET |
|
|
190 |
/* Set CARP MAC as src ethernet address. */ |
| 191 |
if (ifp->if_carp && V_use_carp_src_mac) |
| 192 |
llsaddr = ar_sha(ah); |
| 193 |
#endif |
| 184 |
if (req->flags & IFENCAP_FLAG_BROADCAST) |
194 |
if (req->flags & IFENCAP_FLAG_BROADCAST) |
| 185 |
lladdr = ifp->if_broadcastaddr; |
195 |
lladdr = ifp->if_broadcastaddr; |
| 186 |
break; |
196 |
break; |
|
Lines 190-196
ether_requestencap(struct ifnet *ifp, struct if_encap_req *req)
Link Here
|
| 190 |
|
200 |
|
| 191 |
memcpy(&eh->ether_type, &etype, sizeof(eh->ether_type)); |
201 |
memcpy(&eh->ether_type, &etype, sizeof(eh->ether_type)); |
| 192 |
memcpy(eh->ether_dhost, lladdr, ETHER_ADDR_LEN); |
202 |
memcpy(eh->ether_dhost, lladdr, ETHER_ADDR_LEN); |
| 193 |
memcpy(eh->ether_shost, IF_LLADDR(ifp), ETHER_ADDR_LEN); |
203 |
memcpy(eh->ether_shost, llsaddr, ETHER_ADDR_LEN); |
| 194 |
req->bufsize = sizeof(struct ether_header); |
204 |
req->bufsize = sizeof(struct ether_header); |
| 195 |
|
205 |
|
| 196 |
return (0); |
206 |
return (0); |