Page MenuHomeFreeBSD

D21961.diff
No OneTemporary

D21961.diff

Index: head/sys/netgraph/ng_bridge.h
===================================================================
--- head/sys/netgraph/ng_bridge.h
+++ head/sys/netgraph/ng_bridge.h
@@ -43,10 +43,24 @@
#ifndef _NETGRAPH_NG_BRIDGE_H_
#define _NETGRAPH_NG_BRIDGE_H_
+/*
+ * Support the older ABI based on fixed size tables.
+ * ABI is deprecated, to be removed in releases > 12
+ * Please note: There is no API support!
+ * You canno create new messages using the old API but messages conforming the
+ * old ABI are understood.
+ */
+#define NGM_BRIDGE_TABLE_ABI
+
/* Node type name and magic cookie */
#define NG_BRIDGE_NODE_TYPE "bridge"
#define NGM_BRIDGE_COOKIE 1569321993
+#ifdef NGM_BRIDGE_TABLE_ABI
+#define NGM_BRIDGE_COOKIE_TBL 967239368
+#define NG_BRIDGE_MAX_LINKS 32
+#endif /* NGM_BRIDGE_TABLE_ABI */
+
/* Hook names */
#define NG_BRIDGE_HOOK_LINK_PREFIX "link" /* append decimal integer */
#define NG_BRIDGE_HOOK_LINK_FMT "link%d" /* for use with printf(3) */
@@ -59,6 +73,13 @@
u_int32_t minStableAge; /* min time for a stable host */
};
+#ifdef NGM_BRIDGE_TABLE_ABI
+struct ng_bridge_config_tbl {
+ u_char ipfw[NG_BRIDGE_MAX_LINKS];
+ struct ng_bridge_config cfg;
+};
+#endif /* NGM_BRIDGE_TABLE_ABI */
+
/* Keep this in sync with the above structure definition */
#define NG_BRIDGE_CONFIG_TYPE_INFO { \
{ "debugLevel", &ng_parse_uint8_type }, \
@@ -115,6 +136,15 @@
u_int16_t staleness; /* seconds ago host last heard from */
};
+#ifdef NGM_BRIDGE_TABLE_ABI
+struct ng_bridge_host_tbl {
+ u_char addr[6]; /* ethernet address */
+ u_int16_t linkNum; /* link where addr can be found */
+ u_int16_t age; /* seconds ago entry was created */
+ u_int16_t staleness; /* seconds ago host last heard from */
+};
+#endif /* NGM_BRIDGE_TABLE_ABI */
+
/* external representation of the host */
struct ng_bridge_hostent {
u_char addr[6]; /* ethernet address */
@@ -144,6 +174,19 @@
{ "hosts", (harytype) }, \
{ NULL } \
}
+
+#ifdef NGM_BRIDGE_TABLE_ABI
+struct ng_bridge_hostent_tbl {
+ u_char addr[6]; /* ethernet address */
+ u_int16_t linkNum; /* link where addr can be found */
+ u_int16_t age; /* seconds ago entry was created */
+ u_int16_t staleness; /* seconds ago host last heard from */
+};
+struct ng_bridge_host_tbl_ary {
+ u_int32_t numHosts;
+ struct ng_bridge_hostent_tbl hosts[];
+};
+#endif /* NGM_BRIDGE_TABLE_ABI */
/* Netgraph control messages */
enum {
Index: head/sys/netgraph/ng_bridge.c
===================================================================
--- head/sys/netgraph/ng_bridge.c
+++ head/sys/netgraph/ng_bridge.c
@@ -393,6 +393,72 @@
NGI_GET_MSG(item, msg);
switch (msg->header.typecookie) {
+#ifdef NGM_BRIDGE_TABLE_ABI
+ case NGM_BRIDGE_COOKIE_TBL:
+ switch (msg->header.cmd) {
+ case NGM_BRIDGE_GET_CONFIG:
+ {
+ struct ng_bridge_config_tbl *conf;
+
+ NG_MKRESPONSE(resp, msg, sizeof(*conf),
+ M_NOWAIT|M_ZERO);
+ if (resp == NULL) {
+ error = ENOMEM;
+ break;
+ }
+ conf = (struct ng_bridge_config_tbl *)resp->data;
+ conf->cfg = priv->conf;
+ break;
+ }
+ case NGM_BRIDGE_SET_CONFIG:
+ {
+ struct ng_bridge_config_tbl *conf;
+
+ if (msg->header.arglen != sizeof(*conf)) {
+ error = EINVAL;
+ break;
+ }
+ conf = (struct ng_bridge_config_tbl *)msg->data;
+ priv->conf = conf->cfg;
+ break;
+ }
+ case NGM_BRIDGE_GET_TABLE:
+ {
+ struct ng_bridge_host_tbl_ary *ary;
+ struct ng_bridge_hent *hent;
+ int i, bucket;
+
+ NG_MKRESPONSE(resp, msg, sizeof(*ary) +
+ (priv->numHosts * sizeof(*ary->hosts)), M_NOWAIT);
+ if (resp == NULL) {
+ error = ENOMEM;
+ break;
+ }
+ ary = (struct ng_bridge_host_tbl_ary *)resp->data;
+ ary->numHosts = priv->numHosts;
+ i = 0;
+ for (bucket = 0; bucket < priv->numBuckets; bucket++) {
+ SLIST_FOREACH(hent, &priv->tab[bucket], next) {
+ memcpy(ary->hosts[i].addr,
+ hent->host.addr,
+ sizeof(ary->hosts[i].addr));
+ ary->hosts[i].age = hent->host.age;
+ ary->hosts[i].staleness =
+ hent->host.staleness;
+ ary->hosts[i].linkNum = strtol(
+ NG_HOOK_NAME(hent->host.link->hook) +
+ strlen(NG_BRIDGE_HOOK_LINK_PREFIX),
+ NULL, 10);
+ i++;
+ }
+ }
+ break;
+ }
+ }
+ /* If already handled break, otherwise use new ABI. */
+ if (resp != NULL || error != 0)
+ break;
+#endif /* NGM_BRIDGE_TABLE_ABI */
case NGM_BRIDGE_COOKIE:
switch (msg->header.cmd) {
case NGM_BRIDGE_GET_CONFIG:

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 18, 8:00 PM (2 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25542553
Default Alt Text
D21961.diff (4 KB)

Event Timeline