Set DF for IPv4 and limit mtu to [500,1450]

This commit is contained in:
Adrien Gallouët
2016-10-25 09:08:56 +00:00
parent b82534d54c
commit df0d941241

18
mud.c
View File

@@ -33,6 +33,14 @@
#define MUD_PKTINFO_SIZE sizeof(struct in_addr)
#endif
#if defined IP_DONTFRAG
#define MUD_DFRAG IP_DONTFRAG
#define MUD_DFRAG_OPT 1
#elif defined IP_MTU_DISCOVER
#define MUD_DFRAG IP_MTU_DISCOVER
#define MUD_DFRAG_OPT IP_PMTUDISC_DO
#endif
#define MUD_COUNT(X) (sizeof(X)/sizeof(X[0]))
#define MUD_ONE_MSEC (UINT64_C(1000))
@@ -625,6 +633,12 @@ int mud_get_mtu (struct mud *mud)
int mud_set_mtu (struct mud *mud, int mtu)
{
if ((mtu < 500) ||
(mtu > MUD_PACKET_MAX_SIZE-50)) {
errno = EINVAL;
return -1;
}
if (mud->mtu != mtu) {
mud->mtu = mtu;
mud->send_mtu = 1;
@@ -640,6 +654,7 @@ int mud_setup_socket (int fd, int v4, int v6)
(v4 && mud_sso_int(fd, IPPROTO_IP, MUD_PKTINFO, 1)) ||
(v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, 1)) ||
(v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_V6ONLY, !v4)) ||
(v4 && mud_sso_int(fd, IPPROTO_IP, MUD_DFRAG, MUD_DFRAG_OPT)) ||
(mud_set_nonblock(fd)))
return -1;
@@ -1252,6 +1267,9 @@ int mud_push (struct mud *mud)
mud->tx.start = MUD_PACKET_NEXT(mud->tx.start);
// if (ret == -1 && errno == EMSGSIZE)
// return -1;
if (ret == packet->size)
path_min->limit = limit_min;
}