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); |