162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * CALIPSO - Common Architecture Label IPv6 Security Option 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * This is an implementation of the CALIPSO protocol as specified in 662306a36Sopenharmony_ci * RFC 5570. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Authors: Paul Moore <paul@paul-moore.com> 962306a36Sopenharmony_ci * Huw Davies <huw@codeweavers.com> 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * (c) Copyright Hewlett-Packard Development Company, L.P., 2006 1462306a36Sopenharmony_ci * (c) Copyright Huw Davies <huw@codeweavers.com>, 2015 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#ifndef _CALIPSO_H 1862306a36Sopenharmony_ci#define _CALIPSO_H 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include <linux/types.h> 2162306a36Sopenharmony_ci#include <linux/rcupdate.h> 2262306a36Sopenharmony_ci#include <linux/list.h> 2362306a36Sopenharmony_ci#include <linux/net.h> 2462306a36Sopenharmony_ci#include <linux/skbuff.h> 2562306a36Sopenharmony_ci#include <net/netlabel.h> 2662306a36Sopenharmony_ci#include <net/request_sock.h> 2762306a36Sopenharmony_ci#include <linux/refcount.h> 2862306a36Sopenharmony_ci#include <asm/unaligned.h> 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci/* known doi values */ 3162306a36Sopenharmony_ci#define CALIPSO_DOI_UNKNOWN 0x00000000 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* doi mapping types */ 3462306a36Sopenharmony_ci#define CALIPSO_MAP_UNKNOWN 0 3562306a36Sopenharmony_ci#define CALIPSO_MAP_PASS 2 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci/* 3862306a36Sopenharmony_ci * CALIPSO DOI definitions 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* DOI definition struct */ 4262306a36Sopenharmony_cistruct calipso_doi { 4362306a36Sopenharmony_ci u32 doi; 4462306a36Sopenharmony_ci u32 type; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci refcount_t refcount; 4762306a36Sopenharmony_ci struct list_head list; 4862306a36Sopenharmony_ci struct rcu_head rcu; 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci/* 5262306a36Sopenharmony_ci * Sysctl Variables 5362306a36Sopenharmony_ci */ 5462306a36Sopenharmony_ciextern int calipso_cache_enabled; 5562306a36Sopenharmony_ciextern int calipso_cache_bucketsize; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#ifdef CONFIG_NETLABEL 5862306a36Sopenharmony_ciint __init calipso_init(void); 5962306a36Sopenharmony_civoid calipso_exit(void); 6062306a36Sopenharmony_cibool calipso_validate(const struct sk_buff *skb, const unsigned char *option); 6162306a36Sopenharmony_ci#else 6262306a36Sopenharmony_cistatic inline int __init calipso_init(void) 6362306a36Sopenharmony_ci{ 6462306a36Sopenharmony_ci return 0; 6562306a36Sopenharmony_ci} 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cistatic inline void calipso_exit(void) 6862306a36Sopenharmony_ci{ 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_cistatic inline bool calipso_validate(const struct sk_buff *skb, 7162306a36Sopenharmony_ci const unsigned char *option) 7262306a36Sopenharmony_ci{ 7362306a36Sopenharmony_ci return true; 7462306a36Sopenharmony_ci} 7562306a36Sopenharmony_ci#endif /* CONFIG_NETLABEL */ 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#endif /* _CALIPSO_H */ 78