From 78c896b3b3127515478090c19447e27dc406427e Mon Sep 17 00:00:00 2001 From: Jianfeng Tan Date: Mon, 18 Nov 2019 06:59:50 +0000 Subject: TLDKv2 Signed-off-by: Jianfeng Tan Signed-off-by: Jielong Zhou Signed-off-by: Jian Zhang Signed-off-by: Chen Zhao Change-Id: I55c39de4c6cd30f991f35631eb507f770230f08e --- test/packetdrill/ip_prefix.h | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 test/packetdrill/ip_prefix.h (limited to 'test/packetdrill/ip_prefix.h') diff --git a/test/packetdrill/ip_prefix.h b/test/packetdrill/ip_prefix.h new file mode 100644 index 0000000..0b82260 --- /dev/null +++ b/test/packetdrill/ip_prefix.h @@ -0,0 +1,69 @@ +/* + * Copyright 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ +/* + * Author: ncardwell@google.com (Neal Cardwell) + * + * Types and operations for IPv4 and IPv6 address prefixes. + */ + +#ifndef __IP_PREFIX_H__ +#define __IP_PREFIX_H__ + +#include "types.h" + +#include "ip_address.h" + +/* IPv4 or IPv6 address prefix. */ +struct ip_prefix { + struct ip_address ip; + int prefix_len; /* prefix length in bits */ +}; + +static inline void ip_prefix_reset(struct ip_prefix *prefix) +{ + memset(prefix, 0, sizeof(*prefix)); +} + +/* Parse a human-readable IPv4 prefix and return it. Print an error + * to stderr and exit if there is an error parsing the prefix. + */ +extern struct ip_prefix ipv4_prefix_parse(const char *prefix_string); + +/* Parse a human-readable IPv6 prefix and return it. Print an error + * to stderr and exit if there is an error parsing the prefix. + */ +extern struct ip_prefix ipv6_prefix_parse(const char *prefix_string); + +/* Fill in the given prefix using the first 'prefix_len' bits of the + * given IP address, zeroing out bits beyond the prefix length. + */ +extern struct ip_prefix ip_to_prefix(const struct ip_address *ip, + int prefix_len); + +/* Zero the bits beyond the prefix length. */ +void ip_prefix_normalize(struct ip_prefix *prefix); + +/* Print a human-readable representation of the given IP prefix in the + * given buffer, which must be at least ADDR_STR_LEN bytes long. + * Returns a pointer to the given buffer. + */ +extern const char *ip_prefix_to_string(struct ip_prefix *prefix, + char *buffer); + +#endif /* __IP_PREFIX_H__ */ -- cgit 1.2.3-korg