1*ddba1224SGeliang Tang // SPDX-License-Identifier: GPL-2.0
2*ddba1224SGeliang Tang /* Copyright (c) 2023, SUSE. */
3*ddba1224SGeliang Tang 
4*ddba1224SGeliang Tang #include "vmlinux.h"
5*ddba1224SGeliang Tang #include <bpf/bpf_tracing.h>
6*ddba1224SGeliang Tang #include "bpf_tracing_net.h"
7*ddba1224SGeliang Tang 
8*ddba1224SGeliang Tang char _license[] SEC("license") = "GPL";
9*ddba1224SGeliang Tang 
10*ddba1224SGeliang Tang SEC("fmod_ret/update_socket_protocol")
BPF_PROG(mptcpify,int family,int type,int protocol)11*ddba1224SGeliang Tang int BPF_PROG(mptcpify, int family, int type, int protocol)
12*ddba1224SGeliang Tang {
13*ddba1224SGeliang Tang 	if ((family == AF_INET || family == AF_INET6) &&
14*ddba1224SGeliang Tang 	    type == SOCK_STREAM &&
15*ddba1224SGeliang Tang 	    (!protocol || protocol == IPPROTO_TCP)) {
16*ddba1224SGeliang Tang 		return IPPROTO_MPTCP;
17*ddba1224SGeliang Tang 	}
18*ddba1224SGeliang Tang 
19*ddba1224SGeliang Tang 	return protocol;
20*ddba1224SGeliang Tang }
21