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

Function ipsec_setsockaddrs_inpcb

freebsd/netipsec/ipsec_pcb.c:57–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

55MALLOC_DEFINE(M_IPSEC_INPCB, "inpcbpolicy", "inpcb-resident ipsec policy");
56
57static void
58ipsec_setsockaddrs_inpcb(struct inpcb *inp, union sockaddr_union *src,
59 union sockaddr_union *dst, u_int dir)
60{
61
62#ifdef INET6
63 if (inp->inp_vflag & INP_IPV6) {
64 struct sockaddr_in6 *sin6;
65
66 bzero(&src->sin6, sizeof(src->sin6));
67 bzero(&dst->sin6, sizeof(dst->sin6));
68 src->sin6.sin6_family = AF_INET6;
69 src->sin6.sin6_len = sizeof(struct sockaddr_in6);
70 dst->sin6.sin6_family = AF_INET6;
71 dst->sin6.sin6_len = sizeof(struct sockaddr_in6);
72
73 if (dir == IPSEC_DIR_OUTBOUND)
74 sin6 = &src->sin6;
75 else
76 sin6 = &dst->sin6;
77 sin6->sin6_addr = inp->in6p_laddr;
78 sin6->sin6_port = inp->inp_lport;
79 if (IN6_IS_SCOPE_LINKLOCAL(&inp->in6p_laddr)) {
80 /* XXXAE: use in6p_zoneid */
81 sin6->sin6_addr.s6_addr16[1] = 0;
82 sin6->sin6_scope_id = ntohs(
83 inp->in6p_laddr.s6_addr16[1]);
84 }
85
86 if (dir == IPSEC_DIR_OUTBOUND)
87 sin6 = &dst->sin6;
88 else
89 sin6 = &src->sin6;
90 sin6->sin6_addr = inp->in6p_faddr;
91 sin6->sin6_port = inp->inp_fport;
92 if (IN6_IS_SCOPE_LINKLOCAL(&inp->in6p_faddr)) {
93 /* XXXAE: use in6p_zoneid */
94 sin6->sin6_addr.s6_addr16[1] = 0;
95 sin6->sin6_scope_id = ntohs(
96 inp->in6p_faddr.s6_addr16[1]);
97 }
98 }
99#endif
100#ifdef INET
101 if (inp->inp_vflag & INP_IPV4) {
102 struct sockaddr_in *sin;
103
104 bzero(&src->sin, sizeof(src->sin));
105 bzero(&dst->sin, sizeof(dst->sin));
106 src->sin.sin_family = AF_INET;
107 src->sin.sin_len = sizeof(struct sockaddr_in);
108 dst->sin.sin_family = AF_INET;
109 dst->sin.sin_len = sizeof(struct sockaddr_in);
110
111 if (dir == IPSEC_DIR_OUTBOUND)
112 sin = &src->sin;
113 else
114 sin = &dst->sin;

Callers 1

ipsec_setspidx_inpcbFunction · 0.85

Calls 1

bzeroFunction · 0.85

Tested by

no test coverage detected