MCPcopy Create free account
hub / github.com/F-Stack/f-stack / udp_ipsec_output

Function udp_ipsec_output

freebsd/netipsec/udpencap.c:212–243  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

210}
211
212int
213udp_ipsec_output(struct mbuf *m, struct secasvar *sav)
214{
215 struct udphdr *udp;
216 struct mbuf *n;
217 struct ip *ip;
218 int hlen, off;
219
220 IPSEC_ASSERT(sav->natt != NULL, ("UDP encapsulation isn't required."));
221
222 if (sav->sah->saidx.dst.sa.sa_family == AF_INET6)
223 return (EAFNOSUPPORT);
224
225 ip = mtod(m, struct ip *);
226 hlen = ip->ip_hl << 2;
227 n = m_makespace(m, hlen, sizeof(*udp), &off);
228 if (n == NULL) {
229 DPRINTF(("%s: m_makespace for udphdr failed\n", __func__));
230 return (ENOBUFS);
231 }
232
233 udp = mtodo(n, off);
234 udp->uh_dport = sav->natt->dport;
235 udp->uh_sport = sav->natt->sport;
236 udp->uh_sum = 0;
237 udp->uh_ulen = htons(m->m_pkthdr.len - hlen);
238
239 ip = mtod(m, struct ip *);
240 ip->ip_len = htons(m->m_pkthdr.len);
241 ip->ip_p = IPPROTO_UDP;
242 return (0);
243}
244
245void
246udp_ipsec_adjust_cksum(struct mbuf *m, struct secasvar *sav, int proto,

Callers 1

ipsec_process_doneFunction · 0.85

Calls 1

m_makespaceFunction · 0.85

Tested by

no test coverage detected