3131#define CONNECT6_PROG_PATH "./connect6_prog.o"
3232#define SENDMSG4_PROG_PATH "./sendmsg4_prog.o"
3333#define SENDMSG6_PROG_PATH "./sendmsg6_prog.o"
34+ #define RECVMSG4_PROG_PATH "./recvmsg4_prog.o"
35+ #define RECVMSG6_PROG_PATH "./recvmsg6_prog.o"
3436#define BIND4_PROG_PATH "./bind4_prog.o"
3537#define BIND6_PROG_PATH "./bind6_prog.o"
3638
@@ -94,10 +96,10 @@ static int sendmsg_deny_prog_load(const struct sock_addr_test *test);
9496static int recvmsg_allow_prog_load (const struct sock_addr_test * test );
9597static int recvmsg_deny_prog_load (const struct sock_addr_test * test );
9698static int sendmsg4_rw_asm_prog_load (const struct sock_addr_test * test );
97- static int recvmsg4_rw_asm_prog_load (const struct sock_addr_test * test );
99+ static int recvmsg4_rw_c_prog_load (const struct sock_addr_test * test );
98100static int sendmsg4_rw_c_prog_load (const struct sock_addr_test * test );
99101static int sendmsg6_rw_asm_prog_load (const struct sock_addr_test * test );
100- static int recvmsg6_rw_asm_prog_load (const struct sock_addr_test * test );
102+ static int recvmsg6_rw_c_prog_load (const struct sock_addr_test * test );
101103static int sendmsg6_rw_c_prog_load (const struct sock_addr_test * test );
102104static int sendmsg6_rw_v4mapped_prog_load (const struct sock_addr_test * test );
103105static int sendmsg6_rw_wildcard_prog_load (const struct sock_addr_test * test );
@@ -573,8 +575,8 @@ static struct sock_addr_test tests[] = {
573575 LOAD_REJECT ,
574576 },
575577 {
576- "recvmsg4: rewrite IP & port (asm )" ,
577- recvmsg4_rw_asm_prog_load ,
578+ "recvmsg4: rewrite IP & port (C )" ,
579+ recvmsg4_rw_c_prog_load ,
578580 BPF_CGROUP_UDP4_RECVMSG ,
579581 BPF_CGROUP_UDP4_RECVMSG ,
580582 AF_INET ,
@@ -587,8 +589,8 @@ static struct sock_addr_test tests[] = {
587589 SUCCESS ,
588590 },
589591 {
590- "recvmsg6: rewrite IP & port (asm )" ,
591- recvmsg6_rw_asm_prog_load ,
592+ "recvmsg6: rewrite IP & port (C )" ,
593+ recvmsg6_rw_c_prog_load ,
592594 BPF_CGROUP_UDP6_RECVMSG ,
593595 BPF_CGROUP_UDP6_RECVMSG ,
594596 AF_INET6 ,
@@ -786,45 +788,9 @@ static int sendmsg4_rw_asm_prog_load(const struct sock_addr_test *test)
786788 return load_insns (test , insns , sizeof (insns ) / sizeof (struct bpf_insn ));
787789}
788790
789- static int recvmsg4_rw_asm_prog_load (const struct sock_addr_test * test )
791+ static int recvmsg4_rw_c_prog_load (const struct sock_addr_test * test )
790792{
791- struct sockaddr_in src4_rw_addr ;
792-
793- if (mk_sockaddr (AF_INET , SERV4_IP , SERV4_PORT ,
794- (struct sockaddr * )& src4_rw_addr ,
795- sizeof (src4_rw_addr )) == -1 )
796- return -1 ;
797-
798- struct bpf_insn insns [] = {
799- BPF_MOV64_REG (BPF_REG_6 , BPF_REG_1 ),
800-
801- /* if (sk.family == AF_INET && */
802- BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
803- offsetof(struct bpf_sock_addr , family )),
804- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , AF_INET , 6 ),
805-
806- /* sk.type == SOCK_DGRAM) { */
807- BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
808- offsetof(struct bpf_sock_addr , type )),
809- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , SOCK_DGRAM , 4 ),
810-
811- /* user_ip4 = src4_rw_addr.sin_addr */
812- BPF_MOV32_IMM (BPF_REG_7 , src4_rw_addr .sin_addr .s_addr ),
813- BPF_STX_MEM (BPF_W , BPF_REG_6 , BPF_REG_7 ,
814- offsetof(struct bpf_sock_addr , user_ip4 )),
815-
816- /* user_port = src4_rw_addr.sin_port */
817- BPF_MOV32_IMM (BPF_REG_7 , src4_rw_addr .sin_port ),
818- BPF_STX_MEM (BPF_W , BPF_REG_6 , BPF_REG_7 ,
819- offsetof(struct bpf_sock_addr , user_port )),
820- /* } */
821-
822- /* return 1 */
823- BPF_MOV64_IMM (BPF_REG_0 , 1 ),
824- BPF_EXIT_INSN (),
825- };
826-
827- return load_insns (test , insns , sizeof (insns ) / sizeof (struct bpf_insn ));
793+ return load_path (test , RECVMSG4_PROG_PATH );
828794}
829795
830796static int sendmsg4_rw_c_prog_load (const struct sock_addr_test * test )
@@ -890,37 +856,9 @@ static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test)
890856 return sendmsg6_rw_dst_asm_prog_load (test , SERV6_REWRITE_IP );
891857}
892858
893- static int recvmsg6_rw_asm_prog_load (const struct sock_addr_test * test )
859+ static int recvmsg6_rw_c_prog_load (const struct sock_addr_test * test )
894860{
895- struct sockaddr_in6 src6_rw_addr ;
896-
897- if (mk_sockaddr (AF_INET6 , SERV6_IP , SERV6_PORT ,
898- (struct sockaddr * )& src6_rw_addr ,
899- sizeof (src6_rw_addr )) == -1 )
900- return -1 ;
901-
902- struct bpf_insn insns [] = {
903- BPF_MOV64_REG (BPF_REG_6 , BPF_REG_1 ),
904-
905- /* if (sk.family == AF_INET6) { */
906- BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
907- offsetof(struct bpf_sock_addr , family )),
908- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , AF_INET6 , 10 ),
909-
910- STORE_IPV6 (user_ip6 , src6_rw_addr .sin6_addr .s6_addr32 ),
911-
912- /* user_port = dst6_rw_addr.sin6_port */
913- BPF_MOV32_IMM (BPF_REG_7 , src6_rw_addr .sin6_port ),
914- BPF_STX_MEM (BPF_W , BPF_REG_6 , BPF_REG_7 ,
915- offsetof(struct bpf_sock_addr , user_port )),
916- /* } */
917-
918- /* return 1 */
919- BPF_MOV64_IMM (BPF_REG_0 , 1 ),
920- BPF_EXIT_INSN (),
921- };
922-
923- return load_insns (test , insns , sizeof (insns ) / sizeof (struct bpf_insn ));
861+ return load_path (test , RECVMSG6_PROG_PATH );
924862}
925863
926864static int sendmsg6_rw_v4mapped_prog_load (const struct sock_addr_test * test )
0 commit comments