|
@@ -914,6 +914,13 @@ set_rcvbuf:
|
|
|
}
|
|
|
break;
|
|
|
#endif
|
|
|
+
|
|
|
+ case SO_MAX_PACING_RATE:
|
|
|
+ sk->sk_max_pacing_rate = val;
|
|
|
+ sk->sk_pacing_rate = min(sk->sk_pacing_rate,
|
|
|
+ sk->sk_max_pacing_rate);
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
ret = -ENOPROTOOPT;
|
|
|
break;
|
|
@@ -1177,6 +1184,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
|
|
|
break;
|
|
|
#endif
|
|
|
|
|
|
+ case SO_MAX_PACING_RATE:
|
|
|
+ v.val = sk->sk_max_pacing_rate;
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
return -ENOPROTOOPT;
|
|
|
}
|
|
@@ -2319,6 +2330,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
|
|
|
sk->sk_ll_usec = sysctl_net_busy_read;
|
|
|
#endif
|
|
|
|
|
|
+ sk->sk_max_pacing_rate = ~0U;
|
|
|
/*
|
|
|
* Before updating sk_refcnt, we must commit prior changes to memory
|
|
|
* (Documentation/RCU/rculist_nulls.txt for details)
|