100c94ca2SJakub Kicinski /* SPDX-License-Identifier: GPL-2.0-only */ 200c94ca2SJakub Kicinski 300c94ca2SJakub Kicinski #ifndef __NET_PSP_HELPERS_H 400c94ca2SJakub Kicinski #define __NET_PSP_HELPERS_H 500c94ca2SJakub Kicinski 6*659a2899SJakub Kicinski #include <linux/skbuff.h> 7*659a2899SJakub Kicinski #include <net/sock.h> 800c94ca2SJakub Kicinski #include <net/psp/types.h> 900c94ca2SJakub Kicinski 10ed8a507bSJakub Kicinski struct inet_timewait_sock; 11ed8a507bSJakub Kicinski 1200c94ca2SJakub Kicinski /* Driver-facing API */ 1300c94ca2SJakub Kicinski struct psp_dev * 1400c94ca2SJakub Kicinski psp_dev_create(struct net_device *netdev, struct psp_dev_ops *psd_ops, 1500c94ca2SJakub Kicinski struct psp_dev_caps *psd_caps, void *priv_ptr); 1600c94ca2SJakub Kicinski void psp_dev_unregister(struct psp_dev *psd); 1700c94ca2SJakub Kicinski 18ed8a507bSJakub Kicinski /* Kernel-facing API */ 19*659a2899SJakub Kicinski #if IS_ENABLED(CONFIG_INET_PSP) 20ed8a507bSJakub Kicinski static inline void psp_sk_assoc_free(struct sock *sk) { } 21*659a2899SJakub Kicinski static inline void 22*659a2899SJakub Kicinski psp_twsk_init(struct inet_timewait_sock *tw, const struct sock *sk) { } 23ed8a507bSJakub Kicinski static inline void psp_twsk_assoc_free(struct inet_timewait_sock *tw) { } 24*659a2899SJakub Kicinski static inline void 25*659a2899SJakub Kicinski psp_reply_set_decrypted(struct sk_buff *skb) { } 26*659a2899SJakub Kicinski 27*659a2899SJakub Kicinski static inline void 28*659a2899SJakub Kicinski psp_enqueue_set_decrypted(struct sock *sk, struct sk_buff *skb) 29*659a2899SJakub Kicinski { 30*659a2899SJakub Kicinski } 31*659a2899SJakub Kicinski 32*659a2899SJakub Kicinski static inline unsigned long 33*659a2899SJakub Kicinski __psp_skb_coalesce_diff(const struct sk_buff *one, const struct sk_buff *two, 34*659a2899SJakub Kicinski unsigned long diffs) 35*659a2899SJakub Kicinski { 36*659a2899SJakub Kicinski return diffs; 37*659a2899SJakub Kicinski } 38*659a2899SJakub Kicinski 39*659a2899SJakub Kicinski static inline enum skb_drop_reason 40*659a2899SJakub Kicinski psp_sk_rx_policy_check(struct sock *sk, struct sk_buff *skb) 41*659a2899SJakub Kicinski { 42*659a2899SJakub Kicinski return 0; 43*659a2899SJakub Kicinski } 44*659a2899SJakub Kicinski 45*659a2899SJakub Kicinski static inline enum skb_drop_reason 46*659a2899SJakub Kicinski psp_twsk_rx_policy_check(struct inet_timewait_sock *tw, struct sk_buff *skb) 47*659a2899SJakub Kicinski { 48*659a2899SJakub Kicinski return 0; 49*659a2899SJakub Kicinski } 50*659a2899SJakub Kicinski 51*659a2899SJakub Kicinski static inline struct psp_assoc *psp_skb_get_assoc_rcu(struct sk_buff *skb) 52*659a2899SJakub Kicinski { 53*659a2899SJakub Kicinski return NULL; 54*659a2899SJakub Kicinski } 55*659a2899SJakub Kicinski #else 56*659a2899SJakub Kicinski static inline void psp_sk_assoc_free(struct sock *sk) { } 57*659a2899SJakub Kicinski static inline void 58*659a2899SJakub Kicinski psp_twsk_init(struct inet_timewait_sock *tw, const struct sock *sk) { } 59*659a2899SJakub Kicinski static inline void psp_twsk_assoc_free(struct inet_timewait_sock *tw) { } 60*659a2899SJakub Kicinski static inline void 61*659a2899SJakub Kicinski psp_reply_set_decrypted(struct sk_buff *skb) { } 62*659a2899SJakub Kicinski 63*659a2899SJakub Kicinski static inline void 64*659a2899SJakub Kicinski psp_enqueue_set_decrypted(struct sock *sk, struct sk_buff *skb) { } 65*659a2899SJakub Kicinski 66*659a2899SJakub Kicinski static inline unsigned long 67*659a2899SJakub Kicinski __psp_skb_coalesce_diff(const struct sk_buff *one, const struct sk_buff *two, 68*659a2899SJakub Kicinski unsigned long diffs) 69*659a2899SJakub Kicinski { 70*659a2899SJakub Kicinski return diffs; 71*659a2899SJakub Kicinski } 72*659a2899SJakub Kicinski 73*659a2899SJakub Kicinski static inline enum skb_drop_reason 74*659a2899SJakub Kicinski psp_sk_rx_policy_check(struct sock *sk, struct sk_buff *skb) 75*659a2899SJakub Kicinski { 76*659a2899SJakub Kicinski return 0; 77*659a2899SJakub Kicinski } 78*659a2899SJakub Kicinski 79*659a2899SJakub Kicinski static inline enum skb_drop_reason 80*659a2899SJakub Kicinski psp_twsk_rx_policy_check(struct inet_timewait_sock *tw, struct sk_buff *skb) 81*659a2899SJakub Kicinski { 82*659a2899SJakub Kicinski return 0; 83*659a2899SJakub Kicinski } 84*659a2899SJakub Kicinski 85*659a2899SJakub Kicinski static inline struct psp_assoc *psp_skb_get_assoc_rcu(struct sk_buff *skb) 86*659a2899SJakub Kicinski { 87*659a2899SJakub Kicinski return NULL; 88*659a2899SJakub Kicinski } 89*659a2899SJakub Kicinski #endif 90*659a2899SJakub Kicinski 91*659a2899SJakub Kicinski static inline unsigned long 92*659a2899SJakub Kicinski psp_skb_coalesce_diff(const struct sk_buff *one, const struct sk_buff *two) 93*659a2899SJakub Kicinski { 94*659a2899SJakub Kicinski return __psp_skb_coalesce_diff(one, two, 0); 95*659a2899SJakub Kicinski } 96ed8a507bSJakub Kicinski 9700c94ca2SJakub Kicinski #endif /* __NET_PSP_HELPERS_H */ 98