mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
netgraph/ng_bridge: Reestablish old ABI
In order to be able to merge r353026 bring back support for the old cookie API for a transition period in 12.x releases (and possibly 13) before the old API can be removed again entirely. Suggested by: julian Submitted by: Lutz Donnerhacke (lutz donnerhacke.de) PR: 240787 Reviewed by: julian MFC after: 2 weeks X-MFC with: r353026 Differential Revision: https://reviews.freebsd.org/D21961
This commit is contained in:
parent
dd8a62f058
commit
aeaef7d597
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=356386
|
@ -393,6 +393,72 @@ ng_bridge_rcvmsg(node_p node, item_p item, hook_p lasthook)
|
|||
|
||||
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:
|
||||
|
|
|
@ -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 @@ struct ng_bridge_config {
|
|||
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 @@ struct ng_bridge_host {
|
|||
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 */
|
||||
|
@ -145,6 +175,19 @@ struct ng_bridge_host_ary {
|
|||
{ 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 {
|
||||
NGM_BRIDGE_SET_CONFIG = 1, /* set node configuration */
|
||||
|
|
Loading…
Reference in a new issue