Make ebtables library functions
diff --git a/extensions/ebt_ip.c b/extensions/ebt_ip.c
index b836bae..f93b8b9 100644
--- a/extensions/ebt_ip.c
+++ b/extensions/ebt_ip.c
@@ -57,111 +57,7 @@
 	{ 0 }
 };
 
-/* put the ip string into 4 bytes */
-static int undot_ip(char *ip, unsigned char *ip2)
-{
-	char *p, *q, *end;
-	long int onebyte;
-	int i;
-	char buf[20];
-
-	strncpy(buf, ip, sizeof(buf) - 1);
-
-	p = buf;
-	for (i = 0; i < 3; i++) {
-		if ((q = strchr(p, '.')) == NULL)
-			return -1;
-		*q = '\0';
-		onebyte = strtol(p, &end, 10);
-		if (*end != '\0' || onebyte > 255 || onebyte < 0)
-			return -1;
-		ip2[i] = (unsigned char)onebyte;
-		p = q + 1;
-	}
-
-	onebyte = strtol(p, &end, 10);
-	if (*end != '\0' || onebyte > 255 || onebyte < 0)
-		return -1;
-	ip2[3] = (unsigned char)onebyte;
-
-	return 0;
-}
-
 /* put the mask into 4 bytes */
-static int ip_mask(char *mask, unsigned char *mask2)
-{
-	char *end;
-	long int bits;
-	uint32_t mask22;
-
-	if (undot_ip(mask, mask2)) {
-		/* not the /a.b.c.e format, maybe the /x format */
-		bits = strtol(mask, &end, 10);
-		if (*end != '\0' || bits > 32 || bits < 0)
-			return -1;
-		if (bits != 0) {
-			mask22 = htonl(0xFFFFFFFF << (32 - bits));
-			memcpy(mask2, &mask22, 4);
-		} else {
-			mask22 = 0xFFFFFFFF;
-			memcpy(mask2, &mask22, 4);
-		}
-	}
-	return 0;
-}
-
-/* set the ip mask and ip address */
-void parse_ip_address(char *address, uint32_t *addr, uint32_t *msk)
-{
-	char *p;
-
-	/* first the mask */
-	if ((p = strrchr(address, '/')) != NULL) {
-		*p = '\0';
-		if (ip_mask(p + 1, (unsigned char *)msk))
-			print_error("Problem with the IP mask");
-	}
-	else
-		*msk = 0xFFFFFFFF;
-
-	if (undot_ip(address, (unsigned char *)addr))
-		print_error("Problem with the IP address");
-	*addr = *addr & *msk;
-}
-
-/* transform the ip mask into a string ready for output */
-char *mask_to_dotted(uint32_t mask)
-{
-	int i;
-	static char buf[20];
-	uint32_t maskaddr, bits;
-
-	maskaddr = ntohl(mask);
-
-	/* don't print /32 */
-	if (mask == 0xFFFFFFFFL) {
-		*buf = '\0';
-		return buf;
-	}
-
-	i = 32;
-	bits = 0xFFFFFFFEL; /* case 0xFFFFFFFF has just been dealt with */
-	while (--i >= 0 && maskaddr != bits)
-		bits <<= 1;
-
-	if (i > 0)
-		sprintf(buf, "/%d", i);
-	else if (!i)
-		*buf = '\0';
-	else
-		/* mask was not a decent combination of 1's and 0's */
-		sprintf(buf, "/%d.%d.%d.%d", ((unsigned char *)&mask)[0],
-		   ((unsigned char *)&mask)[1], ((unsigned char *)&mask)[2],
-		   ((unsigned char *)&mask)[3]);
-
-	return buf;
-}
-
 /* transform a protocol and service name into a port number */
 static uint16_t parse_port(const char *protocol, const char *name)
 {
@@ -247,15 +143,15 @@
 
 	switch (c) {
 	case IP_SOURCE:
-		check_option(flags, OPT_SOURCE);
+		ebt_check_option(flags, OPT_SOURCE);
 		ipinfo->bitmask |= EBT_IP_SOURCE;
 
 	case IP_DEST:
 		if (c == IP_DEST) {
-			check_option(flags, OPT_DEST);
+			ebt_check_option(flags, OPT_DEST);
 			ipinfo->bitmask |= EBT_IP_DEST;
 		}
-		if (check_inverse(optarg)) {
+		if (ebt_check_inverse(optarg)) {
 			if (c == IP_SOURCE)
 				ipinfo->invflags |= EBT_IP_SOURCE;
 			else
@@ -265,24 +161,24 @@
 		if (optind > argc)
 			print_error("Missing IP address argument");
 		if (c == IP_SOURCE)
-			parse_ip_address(argv[optind - 1], &ipinfo->saddr,
+			ebt_parse_ip_address(argv[optind - 1], &ipinfo->saddr,
 			   &ipinfo->smsk);
 		else
-			parse_ip_address(argv[optind - 1], &ipinfo->daddr,
+			ebt_parse_ip_address(argv[optind - 1], &ipinfo->daddr,
 			   &ipinfo->dmsk);
 		break;
 
 	case IP_SPORT:
 	case IP_DPORT:
 		if (c == IP_SPORT) {
-			check_option(flags, OPT_SPORT);
+			ebt_check_option(flags, OPT_SPORT);
 			ipinfo->bitmask |= EBT_IP_SPORT;
-			if (check_inverse(optarg))
+			if (ebt_check_inverse(optarg))
 				ipinfo->invflags |= EBT_IP_SPORT;
 		} else {
-			check_option(flags, OPT_DPORT);
+			ebt_check_option(flags, OPT_DPORT);
 			ipinfo->bitmask |= EBT_IP_DPORT;
-			if (check_inverse(optarg))
+			if (ebt_check_inverse(optarg))
 				ipinfo->invflags |= EBT_IP_DPORT;
 		}
 		if (optind > argc)
@@ -294,8 +190,8 @@
 		break;
 
 	case IP_myTOS:
-		check_option(flags, OPT_TOS);
-		if (check_inverse(optarg))
+		ebt_check_option(flags, OPT_TOS);
+		if (ebt_check_inverse(optarg))
 			ipinfo->invflags |= EBT_IP_TOS;
 
 		if (optind > argc)
@@ -308,8 +204,8 @@
 		break;
 
 	case IP_PROTO:
-		check_option(flags, OPT_PROTO);
-		if (check_inverse(optarg))
+		ebt_check_option(flags, OPT_PROTO);
+		if (ebt_check_inverse(optarg))
 			ipinfo->invflags |= EBT_IP_PROTO;
 		if (optind > argc)
 			print_error("Missing IP protocol argument");
@@ -366,7 +262,7 @@
 		for (j = 0; j < 4; j++)
 			printf("%d%s",((unsigned char *)&ipinfo->saddr)[j],
 			   (j == 3) ? "" : ".");
-		printf("%s ", mask_to_dotted(ipinfo->smsk));
+		printf("%s ", ebt_mask_to_dotted(ipinfo->smsk));
 	}
 	if (ipinfo->bitmask & EBT_IP_DEST) {
 		printf("--ip-dst ");
@@ -375,7 +271,7 @@
 		for (j = 0; j < 4; j++)
 			printf("%d%s", ((unsigned char *)&ipinfo->daddr)[j],
 			   (j == 3) ? "" : ".");
-		printf("%s ", mask_to_dotted(ipinfo->dmsk));
+		printf("%s ", ebt_mask_to_dotted(ipinfo->dmsk));
 	}
 	if (ipinfo->bitmask & EBT_IP_TOS) {
 		printf("--ip-tos ");
@@ -471,5 +367,5 @@
 static void _init(void) __attribute((constructor));
 static void _init(void)
 {
-	register_match(&ip_match);
+	ebt_register_match(&ip_match);
 }