Backout previous change, it breaks build and it is not needed

layering violation. As pointed out, there is much better way to do this.
Sorry guys, I need to find a better way to force reviews.

Requested by:	harti, julian, scottl (mentor)
Pointy hat to:	pjd
This commit is contained in:
Pawel Jakub Dawidek 2004-02-20 08:26:27 +00:00
parent d1cd079e12
commit 3c976c3f95
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=126035
4 changed files with 13 additions and 107 deletions

View File

@ -67,7 +67,18 @@
#define IFP2AC(IFP) ((struct arpcom *)IFP)
#define IFP2NG(ifp) ((struct ng_node *)((struct arpcom *)(ifp))->ac_netgraph)
typedef struct ng_ether_private *priv_p;
/* Per-node private data */
struct private {
struct ifnet *ifp; /* associated interface */
hook_p upper; /* upper hook connection */
hook_p lower; /* lower OR orphan hook connection */
u_char lowerOrphan; /* whether lower is lower or orphan */
u_char autoSrcAddr; /* always overwrite source address */
u_char promisc; /* promiscuous mode enabled */
u_long hwassist; /* hardware checksum capabilities */
u_int flags; /* flags e.g. really die */
};
typedef struct private *priv_p;
/* Hook pointers used by if_ethersubr.c to callback to netgraph */
extern void (*ng_ether_input_p)(struct ifnet *ifp, struct mbuf **mp);

View File

@ -65,17 +65,5 @@ enum {
NGM_ETHER_SET_AUTOSRC, /* enable/disable src addr override */
};
/* Per-node private data */
struct ng_ether_private {
struct ifnet *ifp; /* associated interface */
hook_p upper; /* upper hook connection */
hook_p lower; /* lower OR orphan hook connection */
u_char lowerOrphan; /* whether lower is lower or orphan */
u_char autoSrcAddr; /* always overwrite source address */
u_char promisc; /* promiscuous mode enabled */
u_long hwassist; /* hardware checksum capabilities */
u_int flags; /* flags e.g. really die */
};
#endif /* _NETGRAPH_NG_ETHER_H_ */

View File

@ -53,17 +53,11 @@
#include <sys/malloc.h>
#include <sys/ctype.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/errno.h>
#include <net/if.h>
#include <net/if_media.h>
#include <netgraph/ng_message.h>
#include <netgraph/netgraph.h>
#include <netgraph/ng_parse.h>
#include <netgraph/ng_ether.h>
#include <netgraph/ng_one2many.h>
/* Per-link private data */
@ -80,7 +74,6 @@ struct ng_one2many_private {
u_int16_t nextMany; /* next round-robin */
u_int16_t numActiveMany; /* # active "many" */
u_int16_t activeMany[NG_ONE2MANY_MAX_LINKS];
struct callout_handle callout;
};
typedef struct ng_one2many_private *priv_p;
@ -93,8 +86,6 @@ static ng_rcvdata_t ng_one2many_rcvdata;
static ng_disconnect_t ng_one2many_disconnect;
/* Other functions */
static void ng_one2many_scan(node_p node, hook_p hook __unused,
void *arg1 __unused, int arg2 __unused);
static void ng_one2many_update_many(priv_p priv);
/* Store each hook's link number in the private field */
@ -204,15 +195,9 @@ ng_one2many_constructor(node_p node)
return (ENOMEM);
priv->conf.xmitAlg = NG_ONE2MANY_XMIT_ROUNDROBIN;
priv->conf.failAlg = NG_ONE2MANY_FAIL_MANUAL;
priv->conf.interval = 5;
NG_NODE_SET_PRIVATE(node, priv);
if (priv->conf.failAlg == NG_ONE2MANY_FAIL_IFACE_LINK) {
priv->callout = ng_timeout(node, NULL, priv->conf.interval * hz,
ng_one2many_scan, NULL, 0);
}
/* Done */
return (0);
}
@ -301,7 +286,6 @@ ng_one2many_rcvmsg(node_p node, item_p item, hook_p lasthook)
}
switch (conf->failAlg) {
case NG_ONE2MANY_FAIL_MANUAL:
case NG_ONE2MANY_FAIL_IFACE_LINK:
break;
default:
error = EINVAL;
@ -317,13 +301,6 @@ ng_one2many_rcvmsg(node_p node, item_p item, hook_p lasthook)
/* Copy config and reset */
bcopy(conf, &priv->conf, sizeof(*conf));
ng_one2many_update_many(priv);
ng_untimeout(priv->callout, node);
if (priv->conf.failAlg == NG_ONE2MANY_FAIL_IFACE_LINK) {
priv->callout = ng_timeout(node, NULL,
priv->conf.interval * hz, ng_one2many_scan,
NULL, 0);
}
break;
}
case NGM_ONE2MANY_GET_CONFIG:
@ -499,8 +476,6 @@ ng_one2many_shutdown(node_p node)
KASSERT(priv->numActiveMany == 0,
("%s: numActiveMany=%d", __func__, priv->numActiveMany));
if (priv->conf.failAlg == NG_ONE2MANY_FAIL_IFACE_LINK)
ng_untimeout(priv->callout, node);
FREE(priv, M_NETGRAPH);
NG_NODE_SET_PRIVATE(node, NULL);
NG_NODE_UNREF(node);
@ -542,63 +517,6 @@ ng_one2many_disconnect(hook_p hook)
OTHER FUNCTIONS
******************************************************************/
#if 0
/*
* Get interface name.
*/
static const char *
ng_one2many_ifname(struct ng_one2many_link *link)
{
node_p node;
node = link->hook->hk_peer->hk_node;
if (strcmp(node->nd_type->name, "ether") != 0)
return ("unknown");
return (node->nd_name);
}
#endif
/*
* Check if interface related to given node is active.
*/
static int
ng_one2many_active(struct ng_one2many_link *link)
{
struct ng_ether_private *ethpriv;
struct ifmediareq ifmr;
struct ifnet *ifp;
node_p node;
int error;
node = link->hook->hk_peer->hk_node;
if (strcmp(node->nd_type->name, "ether") != 0)
return (0);
ethpriv = NG_NODE_PRIVATE(node);
ifp = ethpriv->ifp;
bzero(&ifmr, sizeof(ifmr));
error = ifp->if_ioctl(ifp, SIOCGIFMEDIA, (char *)&ifmr);
if (error != 0)
return (0);
if ((ifmr.ifm_status & IFM_ACTIVE) == 0)
return (0);
return (1);
}
/*
* Check every priv->conf.interval seconds for active links.
*/
static void
ng_one2many_scan(node_p node, hook_p hook __unused, void *arg1 __unused,
int arg2 __unused)
{
const priv_p priv = NG_NODE_PRIVATE(node);
ng_one2many_update_many(priv);
priv->callout = ng_timeout(node, NULL, priv->conf.interval * hz,
ng_one2many_scan, NULL, 0);
}
/*
* Update internal state after the addition or removal of a "many" link
*/
@ -618,13 +536,6 @@ ng_one2many_update_many(priv_p priv)
priv->numActiveMany++;
}
break;
case NG_ONE2MANY_FAIL_IFACE_LINK:
if (priv->many[linkNum].hook != NULL &&
ng_one2many_active(&priv->many[linkNum])) {
priv->activeMany[priv->numActiveMany] = linkNum;
priv->numActiveMany++;
}
break;
#ifdef INVARIANTS
default:
panic("%s: invalid failAlg", __func__);

View File

@ -61,16 +61,13 @@
#define NG_ONE2MANY_XMIT_ROUNDROBIN 1 /* round-robin delivery */
#define NG_ONE2MANY_XMIT_ALL 2 /* send packets to all many hooks */
/* Algorithms for detecting link failure */
/* Algorithms for detecting link failure (XXX only one so far) */
#define NG_ONE2MANY_FAIL_MANUAL 1 /* use enabledLinks[] array */
#define NG_ONE2MANY_FAIL_IFACE_LINK 2 /* use interface state */
/* Node configuration structure */
struct ng_one2many_config {
u_int32_t xmitAlg; /* how to distribute packets */
u_int32_t failAlg; /* how to detect link failure */
u_int32_t interval; /* interval for IFACE_LINK
failure algorithm */
u_char enabledLinks[NG_ONE2MANY_MAX_LINKS];
};
@ -78,7 +75,6 @@ struct ng_one2many_config {
#define NG_ONE2MANY_CONFIG_TYPE_INFO(atype) { \
{ "xmitAlg", &ng_parse_uint32_type }, \
{ "failAlg", &ng_parse_uint32_type }, \
{ "interval", &ng_parse_uint32_type }, \
{ "enabledLinks", (atype) }, \
{ NULL } \
}