[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-03-02 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org updated this revision to Diff 69103.
neel_neelc.org added a comment.


  I forgot a "return(0)" in the IPv6 unparsing.
  
  This does not solve the "Invalid argument" errors. However, the issue is not 
with my code. I tried printfs in the same statements as the EINVAL returns and 
got nothing.
  
  Something else must be causing this in the ng_ksocket or its dependents.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D23788?vs=68850=69103

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

AFFECTED FILES
  share/man/man4/ng_ksocket.4
  sys/netgraph/ng_ksocket.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs, #manpages
Cc: glebius, bcr, hrs, imp, lutz_donnerhacke.de, melifaro, 
#contributor_reviews_base, freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, 
marcnarc_gmail.com, simonvella_gmail.com, novice_techie.com, 
tommi.pernila_iki.fi
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -60,6 +60,9 @@
 #include 
 #include 
 
+#include 
+#include 
+
 #include 
 #include 
 #include 
@@ -68,6 +71,8 @@
 #include 
 #include 
 
+#include 
+
 #ifdef NG_SEPARATE_MALLOC
 static MALLOC_DEFINE(M_NETGRAPH_KSOCKET, "netgraph_ksock",
 "netgraph ksock node");
@@ -149,6 +154,19 @@
 	{ "encap",	IPPROTO_ENCAP,		PF_INET		},
 	{ "divert",	IPPROTO_DIVERT,		PF_INET		},
 	{ "pim",	IPPROTO_PIM,		PF_INET		},
+	{ "ip6",	IPPROTO_IPV6,		PF_INET6	},
+	{ "raw6",	IPPROTO_RAW,		PF_INET6	},
+	{ "icmp6",	IPPROTO_ICMPV6,		PF_INET6	},
+	{ "igmp6",	IPPROTO_IGMP,		PF_INET6	},
+	{ "tcp6",	IPPROTO_TCP,		PF_INET6	},
+	{ "udp6",	IPPROTO_UDP,		PF_INET6	},
+	{ "gre6",	IPPROTO_GRE,		PF_INET6	},
+	{ "esp6",	IPPROTO_ESP,		PF_INET6	},
+	{ "ah6",	IPPROTO_AH,		PF_INET6	},
+	{ "swipe6",	IPPROTO_SWIPE,		PF_INET6	},
+	{ "encap6",	IPPROTO_ENCAP,		PF_INET6	},
+	{ "divert6",	IPPROTO_DIVERT,		PF_INET6	},
+	{ "pim6",	IPPROTO_PIM,		PF_INET6	},
 	{ NULL,		-1	},
 };
 
@@ -294,10 +312,50 @@
 		break;
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		char *eptr;
+		char addr[INET6_ADDRSTRLEN];
+		char ifname[16];
+		u_long port;
+		bool hasifname = true;
 
+		if (s[*off] == '[')
+			(*off)++;
+		if ((eptr = strstr([*off], "%")) == NULL) {
+			hasifname = false;
+			eptr = strstr([*off], "]");
+		}
+		snprintf(addr, eptr - (s + *off), "%s", [*off]);
+		*off += (eptr - (s + *off));
+		if (!inet_pton(AF_INET6, addr, >sin6_addr))
+			return (EINVAL);
+
+		if (hasifname) {
+			uint16_t scope;
+
+			eptr = strstr(NULL, "]");
+			snprintf(ifname, eptr - (s + *off), "%s", [*off]);
+			*off += (eptr - (s + *off));
+
+			if (ntohl(sin6->sin6_addr.s6_addr16[0]) != 0xfe80)
+return (EINVAL);
+			scope = in6_getscope(>sin6_addr);
+			sin6->sin6_scope_id =
+			in6_getscopezone(ifunit(ifname), scope);
+		}
+
+		if (s[*off] == ']') {
+			(*off)++;
+			port = strtoul(s + *off, , 10);
+			if (port > 0x || eptr == s + *off)
+return (EINVAL);
+			sin6->sin6_port = htons(port);
+		}
+		break;
+	}
+
 	default:
 		return (EINVAL);
 	}
@@ -356,9 +414,21 @@
 		return(0);
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
+		char addr[INET6_ADDRSTRLEN];
+		
+		inet_ntop(AF_INET6, >sin6_addr, addr, INET6_ADDRSTRLEN);
+		slen += snprintf(cbuf, cbuflen, "inet6/[%s]", addr);
+
+		if (sin6->sin6_port != 0) {
+			slen += snprintf(cbuf + strlen(cbuf),
+			cbuflen - strlen(cbuf), ":%d",
+			(u_int)ntohs(sin6->sin6_port));
+		}
+		return(0);
+	}
 
 	default:
 		return (*ng_ksocket_generic_sockaddr_type.supertype->unparse)
diff --git a/share/man/man4/ng_ksocket.4 b/share/man/man4/ng_ksocket.4
--- a/share/man/man4/ng_ksocket.4
+++ b/share/man/man4/ng_ksocket.4
@@ -185,7 +185,8 @@
 equivalent of the C structure
 is an acceptable form.
 For the
-.Dv PF_INET
+.Dv PF_INET ,
+.Dv PF_INET6
 and
 .Dv PF_LOCAL
 address families, a more convenient form is also used, which is
@@ -193,8 +194,12 @@
 address.
 For
 .Dv PF_INET ,
-the address is an IP address followed by an optional colon and port number.
+the address is an IPv4 address followed by an optional colon and port number.
 For
+.Dv PF_INET6 ,
+the address is an IPv6 address possibly enclosed in square brackets followed
+by an optional colon and port number.
+For
 .Dv PF_LOCAL ,
 the address is the pathname as a doubly quoted string.
 .Pp
@@ -204,6 +209,8 @@
 local/"/tmp/foo.socket"
 .It Dv PF_INET
 inet/192.168.1.1:1234
+.It Dv PF_INET
+inet6/[2001::1]:1234
 .It Other
 .Dv "\&{ family=16 len=16 data=[0x70 0x00 0x01 0x23] \&}"
 .El

___
freebsd-net@freebsd.org mailing list

[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-03-02 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org edited the test plan for this revision.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs, #manpages
Cc: glebius, bcr, hrs, imp, lutz_donnerhacke.de, melifaro, 
#contributor_reviews_base, freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, 
marcnarc_gmail.com, simonvella_gmail.com, novice_techie.com, 
tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-03-02 Thread glebius (Gleb Smirnoff)
glebius added a comment.


  In D23788#523247 , @neel_neelc.org 
wrote:
  
  > I still get "ngctl: send msg: Invalid argument" errors with the commands in 
the Test Plan. Am I doing anything wrong?
  
  Well, you've added 3 new places that could return EINVAL. Could it be that 
one of them fires? Of course there are more places in netgraph that can return 
EINVAL, but first makes sense to isolate that this isn't new code.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs, #manpages
Cc: glebius, bcr, hrs, imp, lutz_donnerhacke.de, melifaro, 
#contributor_reviews_base, freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, 
marcnarc_gmail.com, simonvella_gmail.com, novice_techie.com, 
tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-26 Thread bcr (Benedict Reuschling)
bcr accepted this revision as: manpages.
bcr added a comment.


  OK from manpages.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs, #manpages
Cc: bcr, hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-26 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org updated this revision to Diff 68850.
neel_neelc.org edited the summary of this revision.
neel_neelc.org added a comment.
Herald added a reviewer: manpages.


  Let's include a man page.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D23788?vs=68730=68850

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

AFFECTED FILES
  share/man/man4/ng_ksocket.4
  sys/netgraph/ng_ksocket.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs, #manpages
Cc: hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -60,6 +60,9 @@
 #include 
 #include 
 
+#include 
+#include 
+
 #include 
 #include 
 #include 
@@ -68,6 +71,8 @@
 #include 
 #include 
 
+#include 
+
 #ifdef NG_SEPARATE_MALLOC
 static MALLOC_DEFINE(M_NETGRAPH_KSOCKET, "netgraph_ksock",
 "netgraph ksock node");
@@ -149,6 +154,19 @@
 	{ "encap",	IPPROTO_ENCAP,		PF_INET		},
 	{ "divert",	IPPROTO_DIVERT,		PF_INET		},
 	{ "pim",	IPPROTO_PIM,		PF_INET		},
+	{ "ip6",	IPPROTO_IPV6,		PF_INET6	},
+	{ "raw6",	IPPROTO_RAW,		PF_INET6	},
+	{ "icmp6",	IPPROTO_ICMPV6,		PF_INET6	},
+	{ "igmp6",	IPPROTO_IGMP,		PF_INET6	},
+	{ "tcp6",	IPPROTO_TCP,		PF_INET6	},
+	{ "udp6",	IPPROTO_UDP,		PF_INET6	},
+	{ "gre6",	IPPROTO_GRE,		PF_INET6	},
+	{ "esp6",	IPPROTO_ESP,		PF_INET6	},
+	{ "ah6",	IPPROTO_AH,		PF_INET6	},
+	{ "swipe6",	IPPROTO_SWIPE,		PF_INET6	},
+	{ "encap6",	IPPROTO_ENCAP,		PF_INET6	},
+	{ "divert6",	IPPROTO_DIVERT,		PF_INET6	},
+	{ "pim6",	IPPROTO_PIM,		PF_INET6	},
 	{ NULL,		-1	},
 };
 
@@ -294,10 +312,50 @@
 		break;
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		char *eptr;
+		char addr[INET6_ADDRSTRLEN];
+		char ifname[16];
+		u_long port;
+		bool hasifname = true;
 
+		if (s[*off] == '[')
+			(*off)++;
+		if ((eptr = strstr([*off], "%")) == NULL) {
+			hasifname = false;
+			eptr = strstr([*off], "]");
+		}
+		snprintf(addr, eptr - (s + *off), "%s", [*off]);
+		*off += (eptr - (s + *off));
+		if (!inet_pton(AF_INET6, addr, >sin6_addr))
+			return (EINVAL);
+
+		if (hasifname) {
+			uint16_t scope;
+
+			eptr = strstr(NULL, "]");
+			snprintf(ifname, eptr - (s + *off), "%s", [*off]);
+			*off += (eptr - (s + *off));
+
+			if (ntohl(sin6->sin6_addr.s6_addr16[0]) != 0xfe80)
+return (EINVAL);
+			scope = in6_getscope(>sin6_addr);
+			sin6->sin6_scope_id =
+			in6_getscopezone(ifunit(ifname), scope);
+		}
+
+		if (s[*off] == '[') {
+			(*off)++;
+			port = strtoul(s + *off, , 10);
+			if (port > 0x || eptr == s + *off)
+return (EINVAL);
+			sin6->sin6_port = htons(port);
+		}
+		break;
+	}
+
 	default:
 		return (EINVAL);
 	}
@@ -356,9 +414,20 @@
 		return(0);
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
+		char addr[INET6_ADDRSTRLEN];
+		
+		inet_ntop(AF_INET6, >sin6_addr, addr, INET6_ADDRSTRLEN);
+		slen += snprintf(cbuf, cbuflen, "inet6/[%s]", addr);
+
+		if (sin6->sin6_port != 0) {
+			slen += snprintf(cbuf + strlen(cbuf),
+			cbuflen - strlen(cbuf), ":%d",
+			(u_int)ntohs(sin6->sin6_port));
+		}
+	}
 
 	default:
 		return (*ng_ksocket_generic_sockaddr_type.supertype->unparse)
diff --git a/share/man/man4/ng_ksocket.4 b/share/man/man4/ng_ksocket.4
--- a/share/man/man4/ng_ksocket.4
+++ b/share/man/man4/ng_ksocket.4
@@ -185,7 +185,8 @@
 equivalent of the C structure
 is an acceptable form.
 For the
-.Dv PF_INET
+.Dv PF_INET ,
+.Dv PF_INET6
 and
 .Dv PF_LOCAL
 address families, a more convenient form is also used, which is
@@ -193,8 +194,12 @@
 address.
 For
 .Dv PF_INET ,
-the address is an IP address followed by an optional colon and port number.
+the address is an IPv4 address followed by an optional colon and port number.
 For
+.Dv PF_INET6 ,
+the address is an IPv6 address possibly enclosed in square brackets followed
+by an optional colon and port number.
+For
 .Dv PF_LOCAL ,
 the address is the pathname as a doubly quoted string.
 .Pp
@@ -204,6 +209,8 @@
 local/"/tmp/foo.socket"
 .It Dv PF_INET
 inet/192.168.1.1:1234
+.It Dv PF_INET
+inet6/[2001::1]:1234
 .It Other
 .Dv "\&{ family=16 len=16 data=[0x70 0x00 0x01 0x23] \&}"
 .El

___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-26 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org marked 2 inline comments as done.

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs
Cc: hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-23 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org updated this revision to Diff 68730.
neel_neelc.org edited the summary of this revision.

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D23788?vs=68729=68730

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

AFFECTED FILES
  sys/netgraph/ng_ksocket.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs
Cc: hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -60,6 +60,9 @@
 #include 
 #include 
 
+#include 
+#include 
+
 #include 
 #include 
 #include 
@@ -68,6 +71,8 @@
 #include 
 #include 
 
+#include 
+
 #ifdef NG_SEPARATE_MALLOC
 static MALLOC_DEFINE(M_NETGRAPH_KSOCKET, "netgraph_ksock",
 "netgraph ksock node");
@@ -149,6 +154,19 @@
 	{ "encap",	IPPROTO_ENCAP,		PF_INET		},
 	{ "divert",	IPPROTO_DIVERT,		PF_INET		},
 	{ "pim",	IPPROTO_PIM,		PF_INET		},
+	{ "ip6",	IPPROTO_IPV6,		PF_INET6	},
+	{ "raw6",	IPPROTO_RAW,		PF_INET6	},
+	{ "icmp6",	IPPROTO_ICMPV6,		PF_INET6	},
+	{ "igmp6",	IPPROTO_IGMP,		PF_INET6	},
+	{ "tcp6",	IPPROTO_TCP,		PF_INET6	},
+	{ "udp6",	IPPROTO_UDP,		PF_INET6	},
+	{ "gre6",	IPPROTO_GRE,		PF_INET6	},
+	{ "esp6",	IPPROTO_ESP,		PF_INET6	},
+	{ "ah6",	IPPROTO_AH,		PF_INET6	},
+	{ "swipe6",	IPPROTO_SWIPE,		PF_INET6	},
+	{ "encap6",	IPPROTO_ENCAP,		PF_INET6	},
+	{ "divert6",	IPPROTO_DIVERT,		PF_INET6	},
+	{ "pim6",	IPPROTO_PIM,		PF_INET6	},
 	{ NULL,		-1	},
 };
 
@@ -294,10 +312,50 @@
 		break;
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		char *eptr;
+		char addr[INET6_ADDRSTRLEN];
+		char ifname[16];
+		u_long port;
+		bool hasifname = true;
 
+		if (s[*off] == '[')
+			(*off)++;
+		if ((eptr = strstr([*off], "%")) == NULL) {
+			hasifname = false;
+			eptr = strstr([*off], "]");
+		}
+		snprintf(addr, eptr - (s + *off), "%s", [*off]);
+		*off += (eptr - (s + *off));
+		if (!inet_pton(AF_INET6, addr, >sin6_addr))
+			return (EINVAL);
+
+		if (hasifname) {
+			uint16_t scope;
+
+			eptr = strstr(NULL, "]");
+			snprintf(ifname, eptr - (s + *off), "%s", [*off]);
+			*off += (eptr - (s + *off));
+
+			if (ntohl(sin6->sin6_addr.s6_addr16[0]) != 0xfe80)
+return (EINVAL);
+			scope = in6_getscope(>sin6_addr);
+			sin6->sin6_scope_id =
+			in6_getscopezone(ifunit(ifname), scope);
+		}
+
+		if (s[*off] == '[') {
+			(*off)++;
+			port = strtoul(s + *off, , 10);
+			if (port > 0x || eptr == s + *off)
+return (EINVAL);
+			sin6->sin6_port = htons(port);
+		}
+		break;
+	}
+
 	default:
 		return (EINVAL);
 	}
@@ -356,9 +414,20 @@
 		return(0);
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
+		char addr[INET6_ADDRSTRLEN];
+		
+		inet_ntop(AF_INET6, >sin6_addr, addr, INET6_ADDRSTRLEN);
+		slen += snprintf(cbuf, cbuflen, "inet6/[%s]", addr);
+
+		if (sin6->sin6_port != 0) {
+			slen += snprintf(cbuf + strlen(cbuf),
+			cbuflen - strlen(cbuf), ":%d",
+			(u_int)ntohs(sin6->sin6_port));
+		}
+	}
 
 	default:
 		return (*ng_ksocket_generic_sockaddr_type.supertype->unparse)

___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-23 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org updated this revision to Diff 68729.
neel_neelc.org edited the summary of this revision.
neel_neelc.org edited the test plan for this revision.
neel_neelc.org added a comment.


  Here, I use inet_pton and inet_ntop. I didn't know this was possible in the 
kernel, so that's why the first revision lacked this.
  
  I still get "ngctl: send msg: Invalid argument" errors with the commands in 
the Test Plan. Am I doing anything wrong?

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D23788?vs=68662=68729

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

AFFECTED FILES
  sys/netgraph/ng_ksocket.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs
Cc: hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -149,6 +149,19 @@
 	{ "encap",	IPPROTO_ENCAP,		PF_INET		},
 	{ "divert",	IPPROTO_DIVERT,		PF_INET		},
 	{ "pim",	IPPROTO_PIM,		PF_INET		},
+	{ "ip6",	IPPROTO_IPV6,		PF_INET6	},
+	{ "raw6",	IPPROTO_RAW,		PF_INET6	},
+	{ "icmp6",	IPPROTO_ICMPV6,		PF_INET6	},
+	{ "igmp6",	IPPROTO_IGMP,		PF_INET6	},
+	{ "tcp6",	IPPROTO_TCP,		PF_INET6	},
+	{ "udp6",	IPPROTO_UDP,		PF_INET6	},
+	{ "gre6",	IPPROTO_GRE,		PF_INET6	},
+	{ "esp6",	IPPROTO_ESP,		PF_INET6	},
+	{ "ah6",	IPPROTO_AH,		PF_INET6	},
+	{ "swipe6",	IPPROTO_SWIPE,		PF_INET6	},
+	{ "encap6",	IPPROTO_ENCAP,		PF_INET6	},
+	{ "divert6",	IPPROTO_DIVERT,		PF_INET6	},
+	{ "pim6",	IPPROTO_PIM,		PF_INET6	},
 	{ NULL,		-1	},
 };
 
@@ -294,10 +307,42 @@
 		break;
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		char *eptr;
+		char addr[INET6_ADDRSTRLEN];
+		char intid[16];
+		u_long port;
+		bool hasintid = true;
 
+		if (s[*off] == '[')
+			(*off)++;
+		if ((eptr = strstr([*off], "%")) == NULL) {
+			hasintid = false;
+			eptr = strstr([*off], "]");
+		}
+		snprintf(addr, eptr - (s + *off), "%s", [*off]);
+		*off += (eptr - (s + *off));
+		if (!inet_pton(AF_INET6, addr, >sin6_addr))
+			return (EINVAL);
+
+		if (hasintid) {
+			eptr = strstr(NULL, "]");
+			snprintf(intid, eptr - (s + *off), "%s", [*off]);
+			*off += (eptr - (s + *off));
+		}
+
+		if (s[*off] == '[') {
+			(*off)++;
+			port = strtoul(s + *off, , 10);
+			if (port > 0x || eptr == s + *off)
+return (EINVAL);
+			sin6->sin6_port = htons(port);
+		}
+		break;
+	}
+
 	default:
 		return (EINVAL);
 	}
@@ -356,9 +401,20 @@
 		return(0);
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
+		char addr[INET6_ADDRSTRLEN];
+		
+		inet_ntop(AF_INET6, >sin6_addr, addr, INET6_ADDRSTRLEN);
+		slen += snprintf(cbuf, cbuflen, "inet6/[%s]", addr);
+
+		if (sin6->sin6_port != 0) {
+			slen += snprintf(cbuf + strlen(cbuf),
+			cbuflen - strlen(cbuf), ":%d",
+			(u_int)ntohs(sin6->sin6_port));
+		}
+	}
 
 	default:
 		return (*ng_ksocket_generic_sockaddr_type.supertype->unparse)

___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-23 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org edited the summary of this revision.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs
Cc: hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-23 Thread hrs (Hiroki Sato)
hrs requested changes to this revision.
hrs added inline comments.
This revision now requires changes to proceed.

INLINE COMMENTS

> ng_ksocket.c:319
> +
> + for (i = 0; i < 8; i++) {
> + u_long val;

inet_pton in libkern should be used to parse an IPv6 address.  Also, you should 
consider to support a link-local address with an interface identifier such as 
[fe80::1%em0]:80.

> ng_ksocket.c:410
> +
> + slen += snprintf(cbuf, cbuflen, 
> "inet6/[%u:%u:%u:%u:%u:%u:%u:%u]",
> +   ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[0],

Please use inet_ntop().  And sin6->sin6_scope_id must not be ignored.  The 
in-kernel representation of an link-local address has embedded scope zone id 
inside the address itself, so you might want to double-check the scope and 
value of sin6_addr.s6_addr16[1] in both cases of ntop and pton.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org, hrs
Cc: hrs, imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-21 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org updated this revision to Diff 68662.
neel_neelc.org added a comment.


  Remove testing printfs.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D23788?vs=68661=68662

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

AFFECTED FILES
  sys/netgraph/ng_ksocket.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org
Cc: imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -149,6 +149,19 @@
 	{ "encap",	IPPROTO_ENCAP,		PF_INET		},
 	{ "divert",	IPPROTO_DIVERT,		PF_INET		},
 	{ "pim",	IPPROTO_PIM,		PF_INET		},
+	{ "ip6",	IPPROTO_IPV6,		PF_INET6	},
+	{ "raw6",	IPPROTO_RAW,		PF_INET6	},
+	{ "icmp6",	IPPROTO_ICMPV6,		PF_INET6	},
+	{ "igmp6",	IPPROTO_IGMP,		PF_INET6	},
+	{ "tcp6",	IPPROTO_TCP,		PF_INET6	},
+	{ "udp6",	IPPROTO_UDP,		PF_INET6	},
+	{ "gre6",	IPPROTO_GRE,		PF_INET6	},
+	{ "esp6",	IPPROTO_ESP,		PF_INET6	},
+	{ "ah6",	IPPROTO_AH,		PF_INET6	},
+	{ "swipe6",	IPPROTO_SWIPE,		PF_INET6	},
+	{ "encap6",	IPPROTO_ENCAP,		PF_INET6	},
+	{ "divert6",	IPPROTO_DIVERT,		PF_INET6	},
+	{ "pim6",	IPPROTO_PIM,		PF_INET6	},
 	{ NULL,		-1	},
 };
 
@@ -294,10 +307,44 @@
 		break;
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		int i = 0;
 
+		sin6->sin6_port = 0;
+		if (s[*off] == '[')
+			(*off)++;
+
+		for (i = 0; i < 8; i++) {
+			u_long val;
+			char *eptr;
+
+			val = strtoul(s + *off, , 16);
+			if (val > 0x || eptr == s + *off)
+return (EINVAL);
+			*off += (eptr - (s + *off));
+		 	sin6->sin6_addr.s6_addr16[i] = htons(val);
+		 	//sin6->sin6_addr.__u6_addr.__u6_addr16[i] = htons(val);
+			if (i < 7) {
+if (s[*off] != ':')
+	return (EINVAL);
+(*off)++;
+			} else if (s[*off] == ']') {
+(*off)++;
+if (s[*off] == ':') {
+	(*off)++;
+	val = strtoul(s + *off, , 10);
+	if (val > 0x || eptr == s + *off)
+		return (EINVAL);
+	*off += (eptr - (s + *off));
+	sin6->sin6_port = htons(val);
+}
+			}
+		}
+		break;
+	}
+
 	default:
 		return (EINVAL);
 	}
@@ -356,9 +403,29 @@
 		return(0);
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
+
+		slen += snprintf(cbuf, cbuflen, "inet6/[%u:%u:%u:%u:%u:%u:%u:%u]",
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[0],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[1],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[2],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[3],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[4],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[5],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[6],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[7]);
+		if (sin6->sin6_port != 0) {
+			slen += snprintf(cbuf + strlen(cbuf),
+			cbuflen - strlen(cbuf), ":%d",
+			(u_int)ntohs(sin6->sin6_port));
+		}
+		if (slen >= cbuflen)
+			return (ERANGE);
+		*off += sizeof(*sin6);
+		return(0);
+	}
 
 	default:
 		return (*ng_ksocket_generic_sockaddr_type.supertype->unparse)

___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket: IPv6 address parsing and unparsing

2020-02-21 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org retitled this revision from "DRAFT: ng_ksocket IPv6 address 
parsing and unparsing" to "DRAFT: ng_ksocket: IPv6 address parsing and 
unparsing".
neel_neelc.org edited the summary of this revision.
neel_neelc.org edited the test plan for this revision.

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST ACTION
  https://reviews.freebsd.org/D23788/new/

REVISION DETAIL
  https://reviews.freebsd.org/D23788

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org
Cc: imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"


[Differential] D23788: DRAFT: ng_ksocket IPv6 address parsing and unparsing

2020-02-21 Thread neel_neelc.org (Neel Chauhan)
neel_neelc.org created this revision.
neel_neelc.org added a project: network.
Herald added subscribers: Contributor Reviews (base), melifaro, 
lutz_donnerhacke.de, imp.

REVISION SUMMARY
  Add IPv6 support to address parsing and unparsing to ng_ksocket.
  
  Submitted by: Neel Chauhan 
  
  Keep in mind that this is a DRAFT. Things still need to be done, including:
  
  - Fix the "ngctl: send msg: Invalid argument" error
  - Shorthand IPv6
  - Anything more commenters want

TEST PLAN
  Do something like this:
  
  ngctl
  =
  
  + mkpeer ksocket myhook2 inet6/stream/tcp6
  + msg .:myhook2 connect inet6/[0:0:0:0:0:0:0:1]:22
  
  The address should be shorthand, but this is not supported yet.

REPOSITORY
  rS FreeBSD src repository

REVISION DETAIL
  https://reviews.freebsd.org/D23788

AFFECTED FILES
  sys/netgraph/ng_ksocket.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: neel_neelc.org
Cc: imp, lutz_donnerhacke.de, melifaro, #contributor_reviews_base, 
freebsd-net-list, mmacy, kpraveen.lkml_gmail.com, marcnarc_gmail.com, 
simonvella_gmail.com, novice_techie.com, tommi.pernila_iki.fi
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -149,6 +149,19 @@
 	{ "encap",	IPPROTO_ENCAP,		PF_INET		},
 	{ "divert",	IPPROTO_DIVERT,		PF_INET		},
 	{ "pim",	IPPROTO_PIM,		PF_INET		},
+	{ "ip6",	IPPROTO_IPV6,		PF_INET6	},
+	{ "raw6",	IPPROTO_RAW,		PF_INET6	},
+	{ "icmp6",	IPPROTO_ICMPV6,		PF_INET6	},
+	{ "igmp6",	IPPROTO_IGMP,		PF_INET6	},
+	{ "tcp6",	IPPROTO_TCP,		PF_INET6	},
+	{ "udp6",	IPPROTO_UDP,		PF_INET6	},
+	{ "gre6",	IPPROTO_GRE,		PF_INET6	},
+	{ "esp6",	IPPROTO_ESP,		PF_INET6	},
+	{ "ah6",	IPPROTO_AH,		PF_INET6	},
+	{ "swipe6",	IPPROTO_SWIPE,		PF_INET6	},
+	{ "encap6",	IPPROTO_ENCAP,		PF_INET6	},
+	{ "divert6",	IPPROTO_DIVERT,		PF_INET6	},
+	{ "pim6",	IPPROTO_PIM,		PF_INET6	},
 	{ NULL,		-1	},
 };
 
@@ -294,14 +307,52 @@
 		break;
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		int i = 0;
 
+		sin6->sin6_port = 0;
+		if (s[*off] == '[')
+			(*off)++;
+
+		for (i = 0; i < 8; i++) {
+			u_long val;
+			char *eptr;
+
+			val = strtoul(s + *off, , 16);
+			if (val > 0x || eptr == s + *off)
+return (EINVAL);
+			*off += (eptr - (s + *off));
+		 	sin6->sin6_addr.s6_addr16[i] = htons(val);
+		 	//sin6->sin6_addr.__u6_addr.__u6_addr16[i] = htons(val);
+			if (i < 7) {
+if (s[*off] != ':')
+	return (EINVAL);
+(*off)++;
+			} else if (s[*off] == ']') {
+(*off)++;
+if (s[*off] == ':') {
+	(*off)++;
+	val = strtoul(s + *off, , 10);
+	if (val > 0x || eptr == s + *off)
+		return (EINVAL);
+	*off += (eptr - (s + *off));
+	sin6->sin6_port = htons(val);
+}
+			}
+		}
+		break;
+	}
+
 	default:
 		return (EINVAL);
 	}
 
+	if (sa->sa_family == AF_INET6) {
+		struct sockaddr_in6 *const sin6 = (struct sockaddr_in6 *)sa;
+		printf("X%hx\n", ntohs(sin6->sin6_addr.s6_addr16[7]));
+	}
 	/* Done */
 	*buflen = sa->sa_len;
 	return (0);
@@ -356,9 +407,29 @@
 		return(0);
 	}
 
-#if 0
-	case PF_INET6:	/* XXX implement this someday */
-#endif
+	case PF_INET6:
+	{
+		const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sa;
+
+		slen += snprintf(cbuf, cbuflen, "inet6/[%u:%u:%u:%u:%u:%u:%u:%u]",
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[0],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[1],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[2],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[3],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[4],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[5],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[6],
+		  ((const u_int *)>sin6_addr.__u6_addr.__u6_addr16)[7]);
+		if (sin6->sin6_port != 0) {
+			slen += snprintf(cbuf + strlen(cbuf),
+			cbuflen - strlen(cbuf), ":%d",
+			(u_int)ntohs(sin6->sin6_port));
+		}
+		if (slen >= cbuflen)
+			return (ERANGE);
+		*off += sizeof(*sin6);
+		return(0);
+	}
 
 	default:
 		return (*ng_ksocket_generic_sockaddr_type.supertype->unparse)

___
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"