[ipv6calc] Suggested output format
Lionel Elie Mamane
lionel at mamane.lu
Thu Apr 3 22:53:15 CEST 2003
On Thu, Apr 03, 2003 at 10:51:29PM +0200, Lionel Elie Mamane wrote:
> Here is a patch. You'll certainly want to clean it up before
> applying.
And I forget to attach it...
--
Lionel
-------------- next part --------------
Only in ipv6calc-0.45.lio/: config.cache
Only in ipv6calc-0.45.lio/: config.h
Only in ipv6calc-0.45.lio/: config.log
Only in ipv6calc-0.45.lio/: config.status
diff -u --recursive ipv6calc-0.45/contrib/ipv6calc.spec ipv6calc-0.45.lio/contrib/ipv6calc.spec
--- ipv6calc-0.45/contrib/ipv6calc.spec 2002-11-12 20:17:58.000000000 +0100
+++ ipv6calc-0.45.lio/contrib/ipv6calc.spec 2003-04-03 22:26:58.000000000 +0200
@@ -1,6 +1,6 @@
# Project : ipv6calc
# File : contrib/ipv6calc.spec
-# Version : $Id: ipv6calc.spec,v 1.14 2002/11/12 19:17:58 peter Exp $
+# Version : $Id: ipv6calc.spec.in,v 1.18 2002/11/12 18:59:04 peter Exp $
# Copyright : 2001-2002 by Peter Bieringer <pb at bieringer.de>
Summary: IPv6 address format change and calculation utility
diff -u --recursive ipv6calc-0.45/ipv6calc/ipv6calc.c ipv6calc-0.45.lio/ipv6calc/ipv6calc.c
--- ipv6calc-0.45/ipv6calc/ipv6calc.c 2002-11-12 20:03:29.000000000 +0100
+++ ipv6calc-0.45.lio/ipv6calc/ipv6calc.c 2003-04-03 22:36:56.000000000 +0200
@@ -583,6 +583,12 @@
retval = librfc2874_bitstring_to_ipv6addrstruct(argv[0], &ipv6addr, resultstring);
argc--;
break;
+
+ case FORMAT_octal_backslash:
+ if (argc < 1) { printhelp_missinginputdata(); exit(EXIT_FAILURE); };
+ retval = octal_backslash_to_ipv6addrstruct(argv[0], resultstring, &ipv6addr);
+ argc--;
+ break;
default:
fprintf(stderr, " Input-type isn't implemented\n");
@@ -929,6 +935,11 @@
};
break;
+ case FORMAT_octal_backslash:
+ if (ipv6addr.flag_valid != 1) { fprintf(stderr, "No valid IPv6 address given!\n"); exit(EXIT_FAILURE); };
+ retval = libipv6addr_ipv6addrstruct_to_octal_backslash(&ipv6addr, resultstring);
+ break;
+
case FORMAT_ipv4addr:
if (ipv4addr.flag_valid != 1) { fprintf(stderr, "No valid IPv4 address given!\n"); exit(EXIT_FAILURE); };
retval = libipv4addr_ipv4addrstruct_to_string(&ipv4addr, resultstring, formatoptions);
diff -u --recursive ipv6calc-0.45/ipv6calcweb/ipv6calcweb.cgi ipv6calc-0.45.lio/ipv6calcweb/ipv6calcweb.cgi
--- ipv6calc-0.45/ipv6calcweb/ipv6calcweb.cgi 2002-11-04 21:38:37.000000000 +0100
+++ ipv6calc-0.45.lio/ipv6calcweb/ipv6calcweb.cgi 2003-04-03 22:37:02.000000000 +0200
@@ -28,7 +28,7 @@
# Program information
my $program_name = "ipv6calcweb.cgi";
my $program_copyright = "(P) & (C) 2002 by Peter Bieringer";
-my $program_version = "0.44"; # automatic generated line, don't remove this token: @@VERSION@@
+my $program_version = "0.45"; # automatic generated line, don't remove this token: @@VERSION@@
# Debug value
diff -u --recursive ipv6calc-0.45/lib/ipv6calctypes.h ipv6calc-0.45.lio/lib/ipv6calctypes.h
--- ipv6calc-0.45/lib/ipv6calctypes.h 2002-04-21 13:24:08.000000000 +0200
+++ ipv6calc-0.45.lio/lib/ipv6calctypes.h 2003-04-03 22:41:04.000000000 +0200
@@ -47,6 +47,7 @@
#define FORMAT_NUM_any 16
#define FORMAT_NUM_prefix_mac 17
#define FORMAT_NUM_revipv4 18
+#define FORMAT_NUM_octal_backslash 19
#define FORMAT_NUM_undefined 31
#define FORMAT_auto (uint32_t) 0x00000u
@@ -68,6 +69,7 @@
#define FORMAT_any (uint32_t) (1 << FORMAT_NUM_any)
#define FORMAT_prefix_mac (uint32_t) (1 << FORMAT_NUM_prefix_mac)
#define FORMAT_revipv4 (uint32_t) (1 << FORMAT_NUM_revipv4)
+#define FORMAT_octal_backslash (uint32_t) (1 << FORMAT_NUM_octal_backslash)
#define FORMAT_undefined (uint32_t) (1 << FORMAT_NUM_undefined)
/* Primary label of format number, keeping also an explanation */
@@ -98,6 +100,7 @@
{ FORMAT_any , "any" , "any type (currently not supported)", "" },
{ FORMAT_revipv4 , "revipv4" , "reverse IPv4, ending with in-addr.arpa", "" },
{ FORMAT_prefix_mac , "prefix+mac" , "IPv6 prefix and a MAC address", "" },
+ { FORMAT_octal_backslash , "octal_backslash" , "IPv6 address, network byte order, in octal notation with \\-escaping", "" },
};
/* Format conversion matrix */
diff -u --recursive ipv6calc-0.45/lib/libipv6addr.c ipv6calc-0.45.lio/lib/libipv6addr.c
--- ipv6calc-0.45/lib/libipv6addr.c 2002-11-04 20:49:45.000000000 +0100
+++ ipv6calc-0.45.lio/lib/libipv6addr.c 2003-04-03 22:32:30.000000000 +0200
@@ -649,6 +649,95 @@
};
#undef DEBUG_function_name
+/*
+ * function stores an IPv6 address string into a structure
+ *
+ * in : *addrstring = IPv6 address
+ * out: *resultstring = error message
+ * out: ipv6addrp = changed IPv6 address structure
+ * ret: ==0: ok, !=0: error
+ */
+#define DEBUG_function_name "libipv6addr/octal_backslash_to_ipv6addrstruct"
+int octal_backslash_to_ipv6addrstruct(const char *addrstring, char *resultstring, ipv6calc_ipv6addr *ipv6addrp) {
+ int retval = 1, result, i;
+ char tempstring[NI_MAXHOST];
+ int expecteditems = 0;
+ int temp[16];
+ uint32_t scope = 0;
+
+ resultstring[0] = '\0'; /* clear result string */
+
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: Got input: %s\n", DEBUG_function_name, addrstring);
+ };
+
+ if (strlen(addrstring) > sizeof(tempstring) - 1) {
+ fprintf(stderr, "Input too long: %s\n", addrstring);
+ return (1);
+ };
+
+ snprintf(tempstring, sizeof(tempstring), "%s", addrstring);
+
+ ipv6addr_clearall(ipv6addrp);
+
+ /* save prefix length first, if available */
+ ipv6addrp->flag_prefixuse = 0; /* reset flag first */
+
+ ipv6addr_clear(ipv6addrp);
+
+ expecteditems = 16;
+ result = sscanf(tempstring, "\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o", &temp[0], &temp[1], &temp[2], &temp[3], &temp[4], &temp[5], &temp[6], &temp[7], &temp[8], &temp[9], &temp[10], &temp[11], &temp[12], &temp[13], &temp[14], &temp[15]);
+
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: reading into array, got items: %d\n", DEBUG_function_name, result);
+ };
+
+ if ( result != expecteditems ) {
+ snprintf(resultstring, NI_MAXHOST, "Error splitting address %s, got %d items instead of %d!", addrstring, result, expecteditems);
+ retval = 1;
+ return (retval);
+ };
+
+ /* check address words range */
+ for ( i = 0; i < 16; i++ ) {
+ if ( (temp[i] < 0) || (temp[i] > 0xff) ) {
+ snprintf(resultstring, NI_MAXHOST, "Error, given address '%s' is not valid on position %d (%x)!", addrstring, i, temp[i]);
+ retval = 1;
+ return (retval);
+ };
+ };
+
+ /* copy into structure */
+ for ( i = 0; i < 16; i++ ) {
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: Push octet %u: %04x\n", DEBUG_function_name, (unsigned int) i, (unsigned int) temp[i]);
+ };
+ ipv6addr_setoctett(ipv6addrp, (unsigned int) i, (unsigned int) temp[i]);
+ };
+
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: In structure %08x %08x %08x %08x\n", DEBUG_function_name, (unsigned int) ipv6addr_getdword(ipv6addrp, 0), (unsigned int) ipv6addr_getdword(ipv6addrp, 1), (unsigned int) ipv6addr_getdword(ipv6addrp, 2), (unsigned int) ipv6addr_getdword(ipv6addrp, 3));
+ fprintf(stderr, "%s: In structure %04x %04x %04x %04x %04x %04x %04x %04x\n", DEBUG_function_name, (unsigned int) ipv6addr_getword(ipv6addrp, 0), (unsigned int) ipv6addr_getword(ipv6addrp, 1), (unsigned int) ipv6addr_getword(ipv6addrp, 2), (unsigned int) ipv6addr_getword(ipv6addrp, 3), (unsigned int) ipv6addr_getword(ipv6addrp, 4), (unsigned int) ipv6addr_getword(ipv6addrp, 5), (unsigned int) ipv6addr_getword(ipv6addrp, 6), (unsigned int) ipv6addr_getword(ipv6addrp, 7));
+ };
+
+ scope = ipv6addr_gettype(ipv6addrp);
+
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: Got scope %08x\n", DEBUG_function_name, (unsigned int) scope);
+ };
+
+ ipv6addrp->scope = scope;
+
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: First word is: %04x, address info value: %08x\n", DEBUG_function_name, (unsigned int) ipv6addr_getword(ipv6addrp, 0), (unsigned int) scope);
+ fprintf(stderr, "%s: flag_prefixuse %d\n", DEBUG_function_name, ipv6addrp->flag_prefixuse);
+ };
+
+ ipv6addrp->flag_valid = 1;
+ retval = 0;
+ return (retval);
+};
+#undef DEBUG_function_name
/*
* stores the ipv6addr structure in an uncompressed IPv6 format string
@@ -847,6 +936,22 @@
};
#undef DEBUG_function_name
+#define DEBUG_function_name "libipv6addr/ipv6addrstruct_to_octal_backslash"
+int libipv6addr_ipv6addrstruct_to_octal_backslash(const ipv6calc_ipv6addr *ipv6addrp, char *resultstring) {
+
+ char tempstring[NI_MAXHOST];
+
+ snprintf(tempstring, sizeof(tempstring), "\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o\\%o", (unsigned int) ipv6addrp->in6_addr.s6_addr[0],(unsigned int) ipv6addrp->in6_addr.s6_addr[1],(unsigned int) ipv6addrp->in6_addr.s6_addr[2],(unsigned int) ipv6addrp->in6_addr.s6_addr[3],(unsigned int) ipv6addrp->in6_addr.s6_addr[4],(unsigned int) ipv6addrp->in6_addr.s6_addr[5],(unsigned int) ipv6addrp->in6_addr.s6_addr[6],(unsigned int) ipv6addrp->in6_addr.s6_addr[7],(unsigned int) ipv6addrp->in6_addr.s6_addr[8],(unsigned int) ipv6addrp->in6_addr.s6_addr[9],(unsigned int) ipv6addrp->in6_addr.s6_addr[10], (unsigned int) ipv6addrp->in6_addr.s6_addr[11],(unsigned int) ipv6addrp->in6_addr.s6_addr[12], (unsigned int) ipv6addrp->in6_addr.s6_addr[13], (unsigned int) ipv6addrp->in6_addr.s6_addr[14], (unsigned int) ipv6addrp->in6_addr.s6_addr[15]);
+
+ snprintf(resultstring, NI_MAXHOST, "%s", tempstring);
+
+ if ( (ipv6calc_debug & DEBUG_libipv6addr) != 0 ) {
+ fprintf(stderr, "%s: result string: %s\n", DEBUG_function_name, resultstring);
+ };
+
+ return 0;
+};
+#undef DEBUG_function_name
/*
* mask prefix bits (set suffix bits to 0)
diff -u --recursive ipv6calc-0.45/lib/libipv6addr.h ipv6calc-0.45.lio/lib/libipv6addr.h
--- ipv6calc-0.45/lib/libipv6addr.h 2002-09-04 08:34:51.000000000 +0200
+++ ipv6calc-0.45.lio/lib/libipv6addr.h 2003-04-03 22:25:40.000000000 +0200
@@ -140,9 +140,11 @@
extern int libipv6addr_get_registry_string(const ipv6calc_ipv6addr *ipv6addrp, char *resultstring);
extern int addr_to_ipv6addrstruct(const char *addrstring, char *resultstring, ipv6calc_ipv6addr *ipv6addrp);
+extern int octal_backslash_to_ipv6addrstruct(const char *addrstring, char *resultstring, ipv6calc_ipv6addr *ipv6addrp);
extern int libipv6addr_ipv6addrstruct_to_uncompaddr(const ipv6calc_ipv6addr *ipv6addrp, char *resultstring, const uint32_t formatoptions);
+extern int libipv6addr_ipv6addrstruct_to_octal_backslash(const ipv6calc_ipv6addr *ipv6addrp, char *resultstring);
/* extern int ipv6addrstruct_to_fulluncompaddr(const ipv6calc_ipv6addr *ipv6addrp, char *resultstring);*/ /* going obsolete */
Only in ipv6calc-0.45.lio/: Makefile
Only in ipv6calc-0.45.lio/: version.h
More information about the ipv6calc
mailing list