Lines Matching refs:fou

19 struct fou {  struct
46 static inline struct fou *fou_from_sock(struct sock *sk) in fou_from_sock() argument
66 struct fou *fou = fou_from_sock(sk); in fou_udp_recv() local
68 if (!fou) in fou_udp_recv()
73 return -fou->protocol; in fou_udp_recv()
108 struct fou *fou = fou_from_sock(sk); in gue_udp_recv() local
114 if (!fou) in gue_udp_recv()
156 !!(fou->flags & in gue_udp_recv()
263 struct fou *fou = container_of(uoff, struct fou, udp_offloads); in gue_gro_receive() local
308 !!(fou->flags & in gue_gro_receive()
392 static int fou_add_to_port_list(struct net *net, struct fou *fou) in fou_add_to_port_list() argument
395 struct fou *fout; in fou_add_to_port_list()
399 if (fou->port == fout->port) { in fou_add_to_port_list()
405 list_add(&fou->list, &fn->fou_list); in fou_add_to_port_list()
411 static void fou_release(struct fou *fou) in fou_release() argument
413 struct socket *sock = fou->sock; in fou_release()
417 udp_del_offload(&fou->udp_offloads); in fou_release()
418 list_del(&fou->list); in fou_release()
421 kfree_rcu(fou, rcu); in fou_release()
424 static int fou_encap_init(struct sock *sk, struct fou *fou, struct fou_cfg *cfg) in fou_encap_init() argument
427 fou->protocol = cfg->protocol; in fou_encap_init()
428 fou->udp_offloads.callbacks.gro_receive = fou_gro_receive; in fou_encap_init()
429 fou->udp_offloads.callbacks.gro_complete = fou_gro_complete; in fou_encap_init()
430 fou->udp_offloads.port = cfg->udp_config.local_udp_port; in fou_encap_init()
431 fou->udp_offloads.ipproto = cfg->protocol; in fou_encap_init()
436 static int gue_encap_init(struct sock *sk, struct fou *fou, struct fou_cfg *cfg) in gue_encap_init() argument
439 fou->udp_offloads.callbacks.gro_receive = gue_gro_receive; in gue_encap_init()
440 fou->udp_offloads.callbacks.gro_complete = gue_gro_complete; in gue_encap_init()
441 fou->udp_offloads.port = cfg->udp_config.local_udp_port; in gue_encap_init()
450 struct fou *fou = NULL; in fou_create() local
460 fou = kzalloc(sizeof(*fou), GFP_KERNEL); in fou_create()
461 if (!fou) { in fou_create()
468 fou->flags = cfg->flags; in fou_create()
469 fou->port = cfg->udp_config.local_udp_port; in fou_create()
474 err = fou_encap_init(sk, fou, cfg); in fou_create()
479 err = gue_encap_init(sk, fou, cfg); in fou_create()
488 fou->type = cfg->type; in fou_create()
493 sk->sk_user_data = fou; in fou_create()
494 fou->sock = sock; in fou_create()
501 err = udp_add_offload(&fou->udp_offloads); in fou_create()
506 err = fou_add_to_port_list(net, fou); in fou_create()
516 kfree(fou); in fou_create()
528 struct fou *fou; in fou_destroy() local
531 list_for_each_entry(fou, &fn->fou_list, list) { in fou_destroy()
532 if (fou->port == port) { in fou_destroy()
533 fou_release(fou); in fou_destroy()
620 static int fou_fill_info(struct fou *fou, struct sk_buff *msg) in fou_fill_info() argument
622 if (nla_put_u8(msg, FOU_ATTR_AF, fou->sock->sk->sk_family) || in fou_fill_info()
623 nla_put_be16(msg, FOU_ATTR_PORT, fou->port) || in fou_fill_info()
624 nla_put_u8(msg, FOU_ATTR_IPPROTO, fou->protocol) || in fou_fill_info()
625 nla_put_u8(msg, FOU_ATTR_TYPE, fou->type)) in fou_fill_info()
628 if (fou->flags & FOU_F_REMCSUM_NOPARTIAL) in fou_fill_info()
634 static int fou_dump_info(struct fou *fou, u32 portid, u32 seq, in fou_dump_info() argument
643 if (fou_fill_info(fou, skb) < 0) in fou_dump_info()
660 struct fou *fout; in fou_nl_cmd_get_port()
700 struct fou *fout; in fou_nl_dump()
946 struct fou *fou, *next; in fou_exit_net() local
950 list_for_each_entry_safe(fou, next, &fn->fou_list, list) in fou_exit_net()
951 fou_release(fou); in fou_exit_net()