unisap.h revision 296373
1193156Snwhitehorn/* 2193156Snwhitehorn * Copyright (c) 2001-2003 3193156Snwhitehorn * Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4193156Snwhitehorn * All rights reserved. 5193156Snwhitehorn * 6193156Snwhitehorn * Author: Hartmut Brandt <harti@freebsd.org> 7193156Snwhitehorn * 8193156Snwhitehorn * Redistribution and use in source and binary forms, with or without 9193156Snwhitehorn * modification, are permitted provided that the following conditions 10193156Snwhitehorn * are met: 11193156Snwhitehorn * 1. Redistributions of source code must retain the above copyright 12193156Snwhitehorn * notice, this list of conditions and the following disclaimer. 13193156Snwhitehorn * 2. Redistributions in binary form must reproduce the above copyright 14193156Snwhitehorn * notice, this list of conditions and the following disclaimer in the 15193156Snwhitehorn * documentation and/or other materials provided with the distribution. 16193156Snwhitehorn * 17193156Snwhitehorn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18193156Snwhitehorn * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19193156Snwhitehorn * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20193156Snwhitehorn * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21193156Snwhitehorn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22193156Snwhitehorn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23193156Snwhitehorn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24193156Snwhitehorn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25193156Snwhitehorn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26227843Smarius * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27227843Smarius * SUCH DAMAGE. 28227843Smarius * 29193156Snwhitehorn * $Begemot: libunimsg/netnatm/api/unisap.h,v 1.6 2005/05/23 11:49:17 brandt_h Exp $ 30193156Snwhitehorn */ 31193156Snwhitehorn#ifndef _NETNATM_API_UNISAP_H_ 32193156Snwhitehorn#define _NETNATM_API_UNISAP_H_ 33193156Snwhitehorn 34193156Snwhitehorn#include <netnatm/msg/uni_config.h> 35193156Snwhitehorn 36193156Snwhitehornenum unisve_tag { 37193156Snwhitehorn UNISVE_ABSENT, /* Element is absent */ 38193156Snwhitehorn UNISVE_PRESENT, /* Element is present with specific value */ 39193156Snwhitehorn UNISVE_ANY /* Any values is acceptable */ 40193156Snwhitehorn}; 41193156Snwhitehorn 42193156Snwhitehornstruct unisve_addr { 43193156Snwhitehorn enum unisve_tag tag; 44193156Snwhitehorn enum uni_addr_type type; /* type of address */ 45193156Snwhitehorn enum uni_addr_plan plan; /* addressing plan */ 46193156Snwhitehorn uint32_t len; /* length of address */ 47193156Snwhitehorn u_char addr[UNI_ADDR_MAXLEN]; 48193156Snwhitehorn}; 49193156Snwhitehorn 50193156Snwhitehornstruct unisve_selector { 51193156Snwhitehorn enum unisve_tag tag; 52193156Snwhitehorn uint8_t selector; 53193156Snwhitehorn}; 54193156Snwhitehorn 55193156Snwhitehornstruct unisve_blli_id2 { 56193156Snwhitehorn enum unisve_tag tag; 57193156Snwhitehorn u_int proto:5; /* the protocol */ 58193156Snwhitehorn u_int user:7; /* user specific protocol */ 59193156Snwhitehorn}; 60193156Snwhitehorn 61193156Snwhitehornstruct unisve_blli_id3 { 62193156Snwhitehorn enum unisve_tag tag; 63193156Snwhitehorn u_int proto:5; /* L3 protocol */ 64193156Snwhitehorn u_int user:7; /* user specific protocol */ 65193156Snwhitehorn u_int ipi:8; /* ISO/IEC TR 9557 IPI */ 66227843Smarius u_int oui:24; /* IEEE 802.1 OUI */ 67193156Snwhitehorn u_int pid:16; /* IEEE 802.1 PID */ 68193156Snwhitehorn uint32_t noipi; /* ISO/IEC TR 9557 per frame */ 69193156Snwhitehorn}; 70193156Snwhitehorn 71193156Snwhitehornstruct unisve_bhli { 72193156Snwhitehorn enum unisve_tag tag; 73193156Snwhitehorn enum uni_bhli type; /* type of info */ 74193156Snwhitehorn uint32_t len; /* length of info */ 75193156Snwhitehorn uint8_t info[8]; /* info itself */ 76193156Snwhitehorn}; 77261513Snwhitehorn 78193156Snwhitehornstruct uni_sap { 79193156Snwhitehorn struct unisve_addr addr; 80193156Snwhitehorn struct unisve_selector selector; 81193156Snwhitehorn struct unisve_blli_id2 blli_id2; 82193156Snwhitehorn struct unisve_blli_id3 blli_id3; 83193156Snwhitehorn struct unisve_bhli bhli; 84193156Snwhitehorn}; 85193156Snwhitehorn 86193156Snwhitehornint unisve_check_addr(const struct unisve_addr *); 87193156Snwhitehornint unisve_check_selector(const struct unisve_selector *); 88193156Snwhitehornint unisve_check_blli_id2(const struct unisve_blli_id2 *); 89193156Snwhitehornint unisve_check_blli_id3(const struct unisve_blli_id3 *); 90193156Snwhitehornint unisve_check_bhli(const struct unisve_bhli *); 91193156Snwhitehorn 92193156Snwhitehornint unisve_check_sap(const struct uni_sap *); 93193156Snwhitehorn 94193156Snwhitehornint unisve_overlap_addr(const struct unisve_addr *, const struct unisve_addr *); 95193156Snwhitehornint unisve_overlap_selector(const struct unisve_selector *, 96193156Snwhitehorn const struct unisve_selector *); 97193156Snwhitehornint unisve_overlap_blli_id2(const struct unisve_blli_id2 *, 98193156Snwhitehorn const struct unisve_blli_id2 *); 99193156Snwhitehornint unisve_overlap_blli_id3(const struct unisve_blli_id3 *, 100193156Snwhitehorn const struct unisve_blli_id3 *); 101193156Snwhitehornint unisve_overlap_bhli(const struct unisve_bhli *, 102193156Snwhitehorn const struct unisve_bhli *); 103193156Snwhitehornint unisve_overlap_sap(const struct uni_sap *, const struct uni_sap *); 104193156Snwhitehorn 105193156Snwhitehornint unisve_is_catchall(const struct uni_sap *); 106193156Snwhitehornint unisve_match(const struct uni_sap *, const struct uni_ie_called *, 107193156Snwhitehorn const struct uni_ie_blli *, const struct uni_ie_bhli *); 108193156Snwhitehorn 109193156Snwhitehornenum { 110193156Snwhitehorn UNISVE_OK = 0, 111193156Snwhitehorn UNISVE_ERROR_BAD_TAG, 112193156Snwhitehorn UNISVE_ERROR_TYPE_PLAN_CONFLICT, 113193156Snwhitehorn UNISVE_ERROR_ADDR_SEL_CONFLICT, 114193156Snwhitehorn UNISVE_ERROR_ADDR_LEN, 115193156Snwhitehorn UNISVE_ERROR_BAD_ADDR_TYPE, 116193156Snwhitehorn UNISVE_ERROR_BAD_BHLI_TYPE, 117193156Snwhitehorn UNISVE_ERROR_BAD_BHLI_LEN, 118193156Snwhitehorn}; 119193156Snwhitehorn 120193156Snwhitehorn#define UNISVE_ERRSTR \ 121193156Snwhitehorn "no error", \ 122193156Snwhitehorn "bad SVE tag", \ 123193156Snwhitehorn "bad address type/plan combination", \ 124193156Snwhitehorn "bad address plan/selector tag combination", \ 125193156Snwhitehorn "bad address length in SVE", \ 126193156Snwhitehorn "unknown address type in SVE", \ 127193156Snwhitehorn "bad BHLI type in SVE", \ 128193156Snwhitehorn "BHLI info too long in SVE", 129193156Snwhitehorn 130193156Snwhitehorn#endif 131193156Snwhitehorn