|
@@ -733,6 +733,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
|
|
int addr_len = msg->msg_namelen;
|
|
|
int hlimit = -1;
|
|
|
int tclass = -1;
|
|
|
+ int dontfrag = -1;
|
|
|
u16 proto;
|
|
|
int err;
|
|
|
|
|
@@ -811,7 +812,8 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
|
|
memset(opt, 0, sizeof(struct ipv6_txoptions));
|
|
|
opt->tot_len = sizeof(struct ipv6_txoptions);
|
|
|
|
|
|
- err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, &tclass);
|
|
|
+ err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit,
|
|
|
+ &tclass, &dontfrag);
|
|
|
if (err < 0) {
|
|
|
fl6_sock_release(flowlabel);
|
|
|
return err;
|
|
@@ -880,6 +882,9 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
|
|
if (tclass < 0)
|
|
|
tclass = np->tclass;
|
|
|
|
|
|
+ if (dontfrag < 0)
|
|
|
+ dontfrag = np->dontfrag;
|
|
|
+
|
|
|
if (msg->msg_flags&MSG_CONFIRM)
|
|
|
goto do_confirm;
|
|
|
|
|
@@ -890,7 +895,7 @@ back_from_confirm:
|
|
|
lock_sock(sk);
|
|
|
err = ip6_append_data(sk, ip_generic_getfrag, msg->msg_iov,
|
|
|
len, 0, hlimit, tclass, opt, &fl, (struct rt6_info*)dst,
|
|
|
- msg->msg_flags);
|
|
|
+ msg->msg_flags, dontfrag);
|
|
|
|
|
|
if (err)
|
|
|
ip6_flush_pending_frames(sk);
|