[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