1d3c56566Srmind /*- 2d3c56566Srmind * Copyright (c) 2011-2012 The NetBSD Foundation, Inc. 3d3c56566Srmind * All rights reserved. 4d3c56566Srmind * 5d3c56566Srmind * This code is derived from software contributed to The NetBSD Foundation 6d3c56566Srmind * by Christos Zoulas. 7d3c56566Srmind * 8d3c56566Srmind * Redistribution and use in source and binary forms, with or without 9d3c56566Srmind * modification, are permitted provided that the following conditions 10d3c56566Srmind * are met: 11d3c56566Srmind * 1. Redistributions of source code must retain the above copyright 12d3c56566Srmind * notice, this list of conditions and the following disclaimer. 13d3c56566Srmind * 2. Redistributions in binary form must reproduce the above copyright 14d3c56566Srmind * notice, this list of conditions and the following disclaimer in the 15d3c56566Srmind * documentation and/or other materials provided with the distribution. 16d3c56566Srmind * 17d3c56566Srmind * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 18d3c56566Srmind * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 19d3c56566Srmind * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20d3c56566Srmind * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 21d3c56566Srmind * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d3c56566Srmind * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d3c56566Srmind * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24d3c56566Srmind * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25d3c56566Srmind * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26d3c56566Srmind * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27d3c56566Srmind * POSSIBILITY OF SUCH DAMAGE. 28d3c56566Srmind */ 29d3c56566Srmind 30d3c56566Srmind #ifndef _NPF_VAR_H_ 31d3c56566Srmind #define _NPF_VAR_H_ 32d3c56566Srmind 33d3c56566Srmind #define NPFVAR_STRING 0 34d3c56566Srmind #define NPFVAR_IDENTIFIER 1 35d3c56566Srmind #define NPFVAR_VAR_ID 2 36d3c56566Srmind #define NPFVAR_NUM 3 37394473e7Schristos #define NPFVAR_PORT_RANGE 4 38d3c56566Srmind 39d3c56566Srmind /* Note: primitive types are equivalent. */ 40394473e7Schristos #define NPFVAR_PRIM NPFVAR_PORT_RANGE 41394473e7Schristos #define NPFVAR_TYPE(x) (((x) > NPFVAR_PRIM) ? (x) : 0) 42d3c56566Srmind 43394473e7Schristos #define NPFVAR_TABLE 5 44394473e7Schristos #define NPFVAR_FAM 6 458c6e21bfSrmind #define NPFVAR_PROC 7 468c6e21bfSrmind #define NPFVAR_PROC_PARAM 8 478c6e21bfSrmind #define NPFVAR_TCPFLAG 9 488c6e21bfSrmind #define NPFVAR_ICMP 10 494e592132Srmind #define NPFVAR_INTERFACE 11 50*b899bfd9Srmind #define NPFVAR_PROTO 12 51d3c56566Srmind 52d3c56566Srmind #ifdef _NPFVAR_PRIVATE 53d3c56566Srmind static const char *npfvar_types[ ] = { 548c6e21bfSrmind [NPFVAR_STRING] = "string", 558c6e21bfSrmind [NPFVAR_IDENTIFIER] = "identifier", 563ed95329Srmind [NPFVAR_VAR_ID] = "variable-id", 573ed95329Srmind [NPFVAR_NUM] = "number", 588c6e21bfSrmind [NPFVAR_PORT_RANGE] = "port-range", 598c6e21bfSrmind [NPFVAR_TABLE] = "table", 603ed95329Srmind [NPFVAR_FAM] = "family-address-mask", 613ed95329Srmind [NPFVAR_PROC] = "procedure", 623ed95329Srmind [NPFVAR_PROC_PARAM] = "procedure-parameter", 633ed95329Srmind [NPFVAR_TCPFLAG] = "tcp-flag", 648c6e21bfSrmind [NPFVAR_ICMP] = "icmp", 65*b899bfd9Srmind [NPFVAR_INTERFACE] = "interface-address", 66*b899bfd9Srmind [NPFVAR_PROTO] = "proto", 67d3c56566Srmind }; 68d3c56566Srmind #endif 69d3c56566Srmind 70d3c56566Srmind struct npfvar; 71d3c56566Srmind typedef struct npfvar npfvar_t; 72d3c56566Srmind 73d116583eSrmind npfvar_t * npfvar_create(void); 74*b899bfd9Srmind npfvar_t * npfvar_create_element(unsigned, const void *, size_t); 75*b899bfd9Srmind npfvar_t * npfvar_create_from_string(unsigned, const char *); 76d3c56566Srmind npfvar_t * npfvar_lookup(const char *); 77d3c56566Srmind const char * npfvar_type(size_t); 78d116583eSrmind void npfvar_add(npfvar_t *, const char *); 79*b899bfd9Srmind npfvar_t * npfvar_add_element(npfvar_t *, unsigned, const void *, size_t); 80d3c56566Srmind npfvar_t * npfvar_add_elements(npfvar_t *, npfvar_t *); 81d3c56566Srmind void npfvar_destroy(npfvar_t *); 82d3c56566Srmind 83d3c56566Srmind char * npfvar_expand_string(const npfvar_t *); 84d3c56566Srmind size_t npfvar_get_count(const npfvar_t *); 85394473e7Schristos int npfvar_get_type(const npfvar_t *, size_t); 86*b899bfd9Srmind void * npfvar_get_data(const npfvar_t *, unsigned, size_t); 87d3c56566Srmind 88d3c56566Srmind #endif 89