[PATCH] net: add ipv4/ipv6 sctp support
Hangbin Liu <[email protected]> Fri, 25 Jul 2014 12:25:49 +0800
| Newsgroups | org.kernel.vger.trinity |
|---|---|
| Message-ID | <[email protected]> |
Signed-off-by: Hangbin Liu <[email protected]> --- net/proto-ipv4.c | 20 ++++++++++++++------ net/proto-ipv6.c | 21 ++++++++++++++++----- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/net/proto-ipv4.c b/net/proto-ipv4.c index 8babe6d..5588518 100644 --- a/net/proto-ipv4.c +++ b/net/proto-ipv4.c @@ -97,22 +97,30 @@ void ipv4_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen) void inet_rand_socket(struct socket_triplet *st) { - switch (rand() % 3) { - case 0: st->type = SOCK_STREAM; // TCP + switch (rand() % 4) { + case 0: st->type = SOCK_STREAM; // TCP/SCTP + switch (rand() % 3) { + case 0: st->protocol = 0; break; + case 1: st->protocol = IPPROTO_TCP; break; + case 2: st->protocol = IPPROTO_SCTP; break; + default:break; + } + + case 1: st->type = SOCK_DGRAM; // UDP if (rand_bool()) st->protocol = 0; else - st->protocol = IPPROTO_TCP; + st->protocol = IPPROTO_UDP; break; - case 1: st->type = SOCK_DGRAM; // UDP + case 2: st->type = SOCK_SEQPACKET; // SCTP if (rand_bool()) st->protocol = 0; else - st->protocol = IPPROTO_UDP; + st->protocol = IPPROTO_SCTP; break; - case 2: st->type = SOCK_RAW; + case 3: st->type = SOCK_RAW; st->protocol = rand() % PROTO_MAX; break; diff --git a/net/proto-ipv6.c b/net/proto-ipv6.c index 16bceb3..d094939 100644 --- a/net/proto-ipv6.c +++ b/net/proto-ipv6.c @@ -29,10 +29,14 @@ void ipv6_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen) void inet6_rand_socket(struct socket_triplet *st) { - switch (rand() % 3) { - case 0: st->type = SOCK_STREAM; // TCP - st->protocol = 0; - break; + switch (rand() % 4) { + case 0: st->type = SOCK_STREAM; // TCP/SCTP + switch (rand() % 3) { + case 0: st->protocol = 0; break; + case 1: st->protocol = IPPROTO_TCP; break; + case 2: st->protocol = IPPROTO_SCTP; break; + default:break; + } case 1: st->type = SOCK_DGRAM; // UDP if (rand_bool()) @@ -41,7 +45,14 @@ void inet6_rand_socket(struct socket_triplet *st) st->protocol = IPPROTO_UDP; break; - case 2: st->type = SOCK_RAW; + case 2: st->type = SOCK_SEQPACKET; // SCTP + if (rand_bool()) + st->protocol = 0; + else + st->protocol = IPPROTO_SCTP; + break; + + case 3: st->type = SOCK_RAW; st->protocol = rand() % PROTO_MAX; break; -- 1.9.3