Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102832150
D44224.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D44224.diff
View Options
diff --git a/sys/net/if_ipsec.c b/sys/net/if_ipsec.c
--- a/sys/net/if_ipsec.c
+++ b/sys/net/if_ipsec.c
@@ -415,12 +415,12 @@
switch (af) {
#ifdef INET
case AF_INET:
- error = ipsec4_process_packet(ifp, m, sp, NULL);
+ error = ipsec4_process_packet(ifp, m, sp, NULL, ifp->if_mtu);
break;
#endif
#ifdef INET6
case AF_INET6:
- error = ipsec6_process_packet(ifp, m, sp, NULL);
+ error = ipsec6_process_packet(ifp, m, sp, NULL, ifp->if_mtu);
break;
#endif
default:
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -673,7 +673,7 @@
error = ENOBUFS;
goto bad;
}
- if ((error = IPSEC_OUTPUT(ipv4, ifp, m, inp)) != 0) {
+ if ((error = IPSEC_OUTPUT(ipv4, ifp, m, inp, mtu)) != 0) {
if (error == EINPROGRESS)
error = 0;
goto done;
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c
--- a/sys/netinet6/ip6_output.c
+++ b/sys/netinet6/ip6_output.c
@@ -462,7 +462,7 @@
error = ENOBUFS;
goto bad;
}
- if ((error = IPSEC_OUTPUT(ipv6, ifp, m, inp)) != 0) {
+ if ((error = IPSEC_OUTPUT(ipv6, ifp, m, inp, mtu)) != 0) {
if (error == EINPROGRESS)
error = 0;
goto done;
diff --git a/sys/netipsec/ipsec.h b/sys/netipsec/ipsec.h
--- a/sys/netipsec/ipsec.h
+++ b/sys/netipsec/ipsec.h
@@ -338,7 +338,7 @@
int ipsec4_common_input_cb(struct mbuf *, struct secasvar *, int, int);
int ipsec4_check_pmtu(struct ifnet *, struct mbuf *, struct secpolicy *, int);
int ipsec4_process_packet(struct ifnet *, struct mbuf *, struct secpolicy *,
- struct inpcb *);
+ struct inpcb *, u_long);
int ipsec_process_done(struct mbuf *, struct secpolicy *, struct secasvar *,
u_int);
diff --git a/sys/netipsec/ipsec6.h b/sys/netipsec/ipsec6.h
--- a/sys/netipsec/ipsec6.h
+++ b/sys/netipsec/ipsec6.h
@@ -68,7 +68,7 @@
int ipsec6_common_input_cb(struct mbuf *, struct secasvar *, int, int);
int ipsec6_check_pmtu(struct ifnet *, struct mbuf *, struct secpolicy *, int);
int ipsec6_process_packet(struct ifnet *, struct mbuf *, struct secpolicy *,
- struct inpcb *);
+ struct inpcb *, u_long);
int ip6_ipsec_filtertunnel(struct mbuf *);
int ip6_ipsec_pcbctl(struct inpcb *, struct sockopt *);
diff --git a/sys/netipsec/ipsec_output.c b/sys/netipsec/ipsec_output.c
--- a/sys/netipsec/ipsec_output.c
+++ b/sys/netipsec/ipsec_output.c
@@ -188,7 +188,7 @@
*/
static int
ipsec4_perform_request(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
- struct inpcb *inp, u_int idx)
+ struct inpcb *inp, u_int idx, u_long mtu)
{
struct ipsec_ctx_data ctx;
union sockaddr_union *dst;
@@ -290,10 +290,10 @@
int
ipsec4_process_packet(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
- struct inpcb *inp)
+ struct inpcb *inp, u_long mtu)
{
- return (ipsec4_perform_request(ifp, m, sp, inp, 0));
+ return (ipsec4_perform_request(ifp, m, sp, inp, 0, mtu));
}
int
@@ -371,7 +371,7 @@
static int
ipsec4_common_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp,
- int forwarding)
+ int forwarding, u_long mtu)
{
struct secpolicy *sp;
int error;
@@ -423,7 +423,7 @@
return (error);
}
- error = ipsec4_process_packet(ifp, m, sp, inp);
+ error = ipsec4_process_packet(ifp, m, sp, inp, mtu);
if (error == EJUSTRETURN) {
/*
* We had a SP with a level of 'use' and no SA. We
@@ -443,7 +443,7 @@
* other values - mbuf consumed by IPsec.
*/
int
-ipsec4_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp)
+ipsec4_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp, u_long mtu)
{
/*
@@ -454,7 +454,7 @@
if (m_tag_find(m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL)
return (0);
- return (ipsec4_common_output(ifp, m, inp, 0));
+ return (ipsec4_common_output(ifp, m, inp, 0, mtu));
}
/*
@@ -474,7 +474,7 @@
m_freem(m);
return (EACCES);
}
- return (ipsec4_common_output(NULL /* XXXKIB */, m, NULL, 1));
+ return (ipsec4_common_output(NULL /* XXXKIB */, m, NULL, 1, 0));
}
#endif
@@ -584,7 +584,7 @@
*/
static int
ipsec6_perform_request(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
- struct inpcb *inp, u_int idx)
+ struct inpcb *inp, u_int idx, u_long mtu)
{
struct ipsec_ctx_data ctx;
union sockaddr_union *dst;
@@ -676,10 +676,10 @@
int
ipsec6_process_packet(struct ifnet *ifp, struct mbuf *m, struct secpolicy *sp,
- struct inpcb *inp)
+ struct inpcb *inp, u_long mtu)
{
- return (ipsec6_perform_request(ifp, m, sp, inp, 0));
+ return (ipsec6_perform_request(ifp, m, sp, inp, 0, mtu));
}
/*
@@ -751,7 +751,7 @@
static int
ipsec6_common_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp,
- int forwarding)
+ int forwarding, u_long mtu)
{
struct secpolicy *sp;
int error;
@@ -794,7 +794,7 @@
}
/* NB: callee frees mbuf and releases reference to SP */
- error = ipsec6_process_packet(ifp, m, sp, inp);
+ error = ipsec6_process_packet(ifp, m, sp, inp, mtu);
if (error == EJUSTRETURN) {
/*
* We had a SP with a level of 'use' and no SA. We
@@ -814,7 +814,7 @@
* other values - mbuf consumed by IPsec.
*/
int
-ipsec6_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp)
+ipsec6_output(struct ifnet *ifp, struct mbuf *m, struct inpcb *inp, u_long mtu)
{
/*
@@ -825,7 +825,7 @@
if (m_tag_find(m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL)
return (0);
- return (ipsec6_common_output(ifp, m, inp, 0));
+ return (ipsec6_common_output(ifp, m, inp, 0, mtu));
}
/*
@@ -845,7 +845,7 @@
m_freem(m);
return (EACCES);
}
- return (ipsec6_common_output(NULL /* XXXKIB */, m, NULL, 1));
+ return (ipsec6_common_output(NULL /* XXXKIB */, m, NULL, 1, 0));
}
#endif /* INET6 */
@@ -923,7 +923,7 @@
key_freesav(&sav);
IPSECSTAT_INC(ips_out_bundlesa);
return (ipsec4_perform_request(NULL, m, sp, NULL,
- idx));
+ idx, 0));
/* NOTREACHED */
#endif
#ifdef INET6
@@ -931,7 +931,7 @@
key_freesav(&sav);
IPSEC6STAT_INC(ips_out_bundlesa);
return (ipsec6_perform_request(NULL, m, sp, NULL,
- idx));
+ idx, 0));
/* NOTREACHED */
#endif /* INET6 */
default:
diff --git a/sys/netipsec/ipsec_support.h b/sys/netipsec/ipsec_support.h
--- a/sys/netipsec/ipsec_support.h
+++ b/sys/netipsec/ipsec_support.h
@@ -59,7 +59,7 @@
int ipsec4_input(struct mbuf *, int, int);
int ipsec4_forward(struct mbuf *);
int ipsec4_pcbctl(struct inpcb *, struct sockopt *);
-int ipsec4_output(struct ifnet *, struct mbuf *, struct inpcb *);
+int ipsec4_output(struct ifnet *, struct mbuf *, struct inpcb *, u_long);
int ipsec4_capability(struct mbuf *, u_int);
int ipsec4_ctlinput(ipsec_ctlinput_param_t);
#endif /* INET */
@@ -69,7 +69,7 @@
int ipsec6_in_reject(const struct mbuf *, struct inpcb *);
int ipsec6_forward(struct mbuf *);
int ipsec6_pcbctl(struct inpcb *, struct sockopt *);
-int ipsec6_output(struct ifnet *, struct mbuf *, struct inpcb *);
+int ipsec6_output(struct ifnet *, struct mbuf *, struct inpcb *, u_long);
int ipsec6_capability(struct mbuf *, u_int);
int ipsec6_ctlinput(ipsec_ctlinput_param_t);
#endif /* INET6 */
@@ -78,7 +78,8 @@
int (*input)(struct mbuf *, int, int);
int (*check_policy)(const struct mbuf *, struct inpcb *);
int (*forward)(struct mbuf *);
- int (*output)(struct ifnet *, struct mbuf *, struct inpcb *);
+ int (*output)(struct ifnet *, struct mbuf *, struct inpcb *,
+ u_long);
int (*pcbctl)(struct inpcb *, struct sockopt *);
size_t (*hdrsize)(struct inpcb *);
int (*capability)(struct mbuf *, u_int);
@@ -189,7 +190,7 @@
struct inpcb *);
int ipsec_kmod_forward(struct ipsec_support * const, struct mbuf *);
int ipsec_kmod_output(struct ipsec_support * const, struct ifnet *,
- struct mbuf *, struct inpcb *);
+ struct mbuf *, struct inpcb *, u_long);
int ipsec_kmod_pcbctl(struct ipsec_support * const, struct inpcb *,
struct sockopt *);
int ipsec_kmod_capability(struct ipsec_support * const, struct mbuf *, u_int);
diff --git a/sys/netipsec/subr_ipsec.c b/sys/netipsec/subr_ipsec.c
--- a/sys/netipsec/subr_ipsec.c
+++ b/sys/netipsec/subr_ipsec.c
@@ -368,9 +368,10 @@
ipsec_ctlinput_param_t param), METHOD_ARGS(param)
)
-IPSEC_KMOD_METHOD(int, ipsec_kmod_output, sc,
- output, METHOD_DECL(struct ipsec_support * const sc, struct ifnet *ifp,
- struct mbuf *m, struct inpcb *inp), METHOD_ARGS(ifp, m, inp)
+IPSEC_KMOD_METHOD(int, ipsec_kmod_output, sc, output,
+ METHOD_DECL(struct ipsec_support * const sc, struct ifnet *ifp,
+ struct mbuf *m, struct inpcb *inp, u_long mtu),
+ METHOD_ARGS(ifp, m, inp, mtu)
)
IPSEC_KMOD_METHOD(int, ipsec_kmod_pcbctl, sc,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Nov 18, 6:18 PM (9 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14702460
Default Alt Text
D44224.diff (8 KB)
Attached To
Mode
D44224: ipsec_output(): add mtu argument
Attached
Detach File
Event Timeline
Log In to Comment