Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / include / net / xfrm.h
index 9e806c7..b2a06f1 100644 (file)
@@ -1996,6 +1996,39 @@ static inline int xfrm_tunnel_check(struct sk_buff *skb, struct xfrm_state *x,
        return 0;
 }
 
+extern const int xfrm_msg_min[XFRM_NR_MSGTYPES];
+extern const struct nla_policy xfrma_policy[XFRMA_MAX+1];
+
+struct xfrm_translator {
+       /* Allocate frag_list and put compat translation there */
+       int (*alloc_compat)(struct sk_buff *skb, const struct nlmsghdr *src);
+
+       /* Allocate nlmsg with 64-bit translaton of received 32-bit message */
+       struct nlmsghdr *(*rcv_msg_compat)(const struct nlmsghdr *nlh,
+                       int maxtype, const struct nla_policy *policy,
+                       struct netlink_ext_ack *extack);
+
+       /* Translate 32-bit user_policy from sockptr */
+       int (*xlate_user_policy_sockptr)(u8 **pdata32, int optlen);
+
+       struct module *owner;
+};
+
+#if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
+extern int xfrm_register_translator(struct xfrm_translator *xtr);
+extern int xfrm_unregister_translator(struct xfrm_translator *xtr);
+extern struct xfrm_translator *xfrm_get_translator(void);
+extern void xfrm_put_translator(struct xfrm_translator *xtr);
+#else
+static inline struct xfrm_translator *xfrm_get_translator(void)
+{
+       return NULL;
+}
+static inline void xfrm_put_translator(struct xfrm_translator *xtr)
+{
+}
+#endif
+
 #if IS_ENABLED(CONFIG_IPV6)
 static inline bool xfrm6_local_dontfrag(const struct sock *sk)
 {