Add a cmsg of type IP_TOS for UDP/IPv4 sockets to specify the TOS byte.
MFC after: 3 days
This commit is contained in:
parent
0ca5e953e7
commit
f584d74b4d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=236961
@ -956,6 +956,7 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
|
||||
int ipflags;
|
||||
u_short fport, lport;
|
||||
int unlock_udbinfo;
|
||||
u_char tos;
|
||||
|
||||
/*
|
||||
* udp_output() may need to temporarily bind or connect the current
|
||||
@ -972,6 +973,7 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
|
||||
|
||||
src.sin_family = 0;
|
||||
INP_RLOCK(inp);
|
||||
tos = inp->inp_ip_tos;
|
||||
if (control != NULL) {
|
||||
/*
|
||||
* XXX: Currently, we assume all the optional information is
|
||||
@ -1010,6 +1012,14 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
|
||||
*(struct in_addr *)CMSG_DATA(cm);
|
||||
break;
|
||||
|
||||
case IP_TOS:
|
||||
if (cm->cmsg_len != CMSG_LEN(sizeof(u_char))) {
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
tos = *(u_char *)CMSG_DATA(cm);
|
||||
break;
|
||||
|
||||
default:
|
||||
error = ENOPROTOOPT;
|
||||
break;
|
||||
@ -1225,7 +1235,7 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
|
||||
ui->ui_sum = 0;
|
||||
((struct ip *)ui)->ip_len = sizeof (struct udpiphdr) + len;
|
||||
((struct ip *)ui)->ip_ttl = inp->inp_ip_ttl; /* XXX */
|
||||
((struct ip *)ui)->ip_tos = inp->inp_ip_tos; /* XXX */
|
||||
((struct ip *)ui)->ip_tos = tos; /* XXX */
|
||||
UDPSTAT_INC(udps_opackets);
|
||||
|
||||
if (unlock_udbinfo == UH_WLOCKED)
|
||||
|
Loading…
Reference in New Issue
Block a user