Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Mar 2004 21:59:57 +0300
From:      Gleb Smirnoff <glebius@cell.sick.ru>
To:        Ruslan Ermilov <ru@freebsd.org>
Cc:        freebsd-net@freebsd.org
Subject:   Re: kern/63864: [patch] new control message for ng_iface(4) - getifindex
Message-ID:  <20040309185957.GB74537@cell.sick.ru>
In-Reply-To: <20040309065356.GA55139@ip.net.ua>
References:  <200403072302.i27N2StR008804@freefall.freebsd.org> <20040308102033.GA66247@cell.sick.ru> <20040308212939.GB30394@ip.net.ua> <20040308214820.GA68803@cell.sick.ru> <20040309065356.GA55139@ip.net.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Mar 09, 2004 at 08:53:56AM +0200, Ruslan Ermilov wrote:
R> On Tue, Mar 09, 2004 at 12:48:20AM +0300, Gleb Smirnoff wrote:
R> > On Mon, Mar 08, 2004 at 11:29:39PM +0200, Ruslan Ermilov wrote:
R> > R> >   I have one more idea. Currently we have got 3 interface nodes: ng_ether, ng_iface,
R> > R> > ng_eiface. 2 of them already support "getifindex" message, imagine I (or someone else) send
R> > R> > you patch tomorrow, which adds support to ng_eiface. OK, now all three support. May be
R> > R> > in future some new interface nodes will be developed.
R> > R> > 
R> > R> >   Imagine the following: you have node, which is connected to some generic
R> > R> > interface (it doesn't know which node type exactly). This node wants to
R> > R> > determine interface index of attached interfac. It would send 3 "getifindex" messages with 3
R> > R> > different cookies. Two of messages will always fail, and one return. This is not nice.
R> > R> > 
R> > R> > What I suggest: create a new semi-generic cookie NGM_GENERICIFACE_COOKIE, which will be
R> > R> > supported by all interface nodes. Put NGM_GENERICIFACE_GETIFINDEX message under
R> > R> > NGM_GENERICIFACE_COOKIE case brackets. If you like this idea, please reply me. And I'll send
R> > R> > patches.
R> > R> > 
R> > R> How do you think "ngctl msg ng0: getifindex" works?  ;)
R> > 
R> > So, you suggest to use ASCII message in situation described above? IMHO, ASCII messages were 
R> > invented for human interface purposes, not for node interaction.
R> > 
R> OK, how about sending a NGM_NODEINFO message to the node, and
R> picking up XXX for (NGM_XXX_COOKIE, NGM_XXX_GET_IFNAME) based
R> on the returned type?

First, this requires some dialog-like message interchange (as well as ASCII message).
Netgraph does not provide nice API for this. I see the only way to implement:

1) send out NGM_NODEINFO message from some node method
2) catch reply in xxx_rcvmsg(), construct new message and send it
3) catch second reply in xxx_rcvmsg()

Second, this will work only with a certain number of nodes. The code of xxx_rcvmsg()
will look like:

if (msg->header.flags & NGF_RESP) {
	switch (msg->header.typecookie) {
	case NGM_GENERIC_COOKIE:
		switch (msg->header.cmd) {
		case NGM_NODEINFO:
			{
			struct nodeinfo *info = 
				(struct nodeinfo *)msg->data;

			    if (strcmp(info->type, NG_IFACE_NODE_TYPE, strlen(NG_IFACE_NODE_TYPE)) {
					xxxxx
			    } else
			    if (strcmp(info->type, NG_ETHER_NODE_TYPE ..... {
					yyyyyy


This won't be generic solution. Whenever, a new interface node is implemented (e.g. ng_atm),
our imaginary node needs a patch and ng_atm.h to be included.

My proposal brings a generic solution for any new interface node type.

-- 
Totus tuus, Glebius.
GLEBIUS-RIPN GLEB-RIPE



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040309185957.GB74537>