Set DF for IPv4 and limit mtu to [500,1450]
This commit is contained in:
18
mud.c
18
mud.c
@@ -33,6 +33,14 @@
|
|||||||
#define MUD_PKTINFO_SIZE sizeof(struct in_addr)
|
#define MUD_PKTINFO_SIZE sizeof(struct in_addr)
|
||||||
#endif
|
#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_COUNT(X) (sizeof(X)/sizeof(X[0]))
|
||||||
|
|
||||||
#define MUD_ONE_MSEC (UINT64_C(1000))
|
#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)
|
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) {
|
if (mud->mtu != mtu) {
|
||||||
mud->mtu = mtu;
|
mud->mtu = mtu;
|
||||||
mud->send_mtu = 1;
|
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)) ||
|
(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_RECVPKTINFO, 1)) ||
|
||||||
(v6 && mud_sso_int(fd, IPPROTO_IPV6, IPV6_V6ONLY, !v4)) ||
|
(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)))
|
(mud_set_nonblock(fd)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -1252,6 +1267,9 @@ int mud_push (struct mud *mud)
|
|||||||
|
|
||||||
mud->tx.start = MUD_PACKET_NEXT(mud->tx.start);
|
mud->tx.start = MUD_PACKET_NEXT(mud->tx.start);
|
||||||
|
|
||||||
|
// if (ret == -1 && errno == EMSGSIZE)
|
||||||
|
// return -1;
|
||||||
|
|
||||||
if (ret == packet->size)
|
if (ret == packet->size)
|
||||||
path_min->limit = limit_min;
|
path_min->limit = limit_min;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user