Page MenuHomeFreeBSD

D23850.id68876.diff
No OneTemporary

D23850.id68876.diff

Index: lib/libnetgraph/msg.c
===================================================================
--- lib/libnetgraph/msg.c
+++ lib/libnetgraph/msg.c
@@ -71,10 +71,9 @@
/* Prepare message header */
memset(&msg, 0, sizeof(msg));
- msg.header.version = NG_VERSION;
+ msg.header.version = NGM_VERSION;
msg.header.typecookie = cookie;
msg.header.token = atomic_fetch_add(&gMsgId, 1) & INT_MAX;
- msg.header.flags = NGF_ORIG;
msg.header.cmd = cmd;
snprintf((char *)msg.header.cmdstr, NG_CMDSTRSIZ, "cmd%d", cmd);
@@ -143,7 +142,7 @@
/* Now send binary version */
binary = (struct ng_mesg *)reply->data;
binary->header.token = atomic_fetch_add(&gMsgId, 1) & INT_MAX;
- binary->header.version = NG_VERSION;
+ binary->header.version = NGM_VERSION;
if (NgDeliverMsg(cs,
path, binary, binary->data, binary->header.arglen) < 0) {
free(reply);
@@ -166,7 +165,7 @@
/* Prepare message header */
rep = *msg;
- rep.header.flags = NGF_RESP;
+ rep.header.flags |= NGF_RESP;
/* Deliver message */
return (NgDeliverMsg(cs, path, &rep, args, arglen));
Index: libexec/pppoed/pppoed.c
===================================================================
--- libexec/pppoed/pppoed.c
+++ libexec/pppoed/pppoed.c
@@ -386,9 +386,9 @@
_exit(EX_TEMPFAIL);
}
- if (rep->header.version != NG_VERSION) {
+ if (rep->header.version != NGM_VERSION) {
syslog(LOG_ERR, "%ld: Unexpected netgraph version, expected %ld",
- (long)rep->header.version, (long)NG_VERSION);
+ (long)rep->header.version, (long)NGM_VERSION);
_exit(EX_PROTOCOL);
}
Index: share/man/man4/netgraph.4
===================================================================
--- share/man/man4/netgraph.4
+++ share/man/man4/netgraph.4
@@ -844,7 +844,7 @@
struct ng_mesg {
struct ng_msghdr {
- u_char version; /* Must equal NG_VERSION */
+ u_char version; /* Must equal NGM_VERSION */
u_char spare; /* Pad to 4 bytes */
uint16_t spare2;
uint32_t arglen; /* Length of cmd/resp data */
@@ -858,8 +858,7 @@
};
#define NG_ABI_VERSION 12 /* Netgraph kernel ABI version */
-#define NG_VERSION 8 /* Netgraph message version */
-#define NGF_ORIG 0x00000000 /* The msg is the original request */
+#define NGM_VERSION 8 /* Netgraph message version */
#define NGF_RESP 0x00000001 /* The message is a response */
.Ed
.Pp
@@ -873,7 +872,7 @@
.Nm
message protocol itself.
The current version is
-.Dv NG_VERSION .
+.Dv NGM_VERSION .
.It Va arglen
This is the length of any extra arguments, which begin at
.Va data .
Index: sys/netgraph/ng_base.c
===================================================================
--- sys/netgraph/ng_base.c
+++ sys/netgraph/ng_base.c
@@ -3253,7 +3253,7 @@
SYSCTL_NODE(_net, OID_AUTO, graph, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"netgraph Family");
SYSCTL_INT(_net_graph, OID_AUTO, abi_version, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, NG_ABI_VERSION,"");
-SYSCTL_INT(_net_graph, OID_AUTO, msg_version, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, NG_VERSION, "");
+SYSCTL_INT(_net_graph, OID_AUTO, msg_version, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, NGM_VERSION, "");
#ifdef NETGRAPH_DEBUG
void
Index: sys/netgraph/ng_message.h
===================================================================
--- sys/netgraph/ng_message.h
+++ sys/netgraph/ng_message.h
@@ -58,7 +58,7 @@
struct ng_msghdr {
u_char version; /* == NGM_VERSION */
u_char spare; /* pad to 4 bytes */
- u_int16_t spare2;
+ u_int16_t spare2;
u_int32_t arglen; /* length of data */
u_int32_t cmd; /* command identifier */
u_int32_t flags; /* message status */
@@ -69,6 +69,23 @@
char data[]; /* placeholder for actual data */
};
+/* A netgraph message */
+struct ng_mesg2 {
+ struct ng_msghdr2 {
+ u_char version; /* == NGM_VERSION2 */
+ u_char spare; /* pad to 4 bytes */
+ u_int16_t spare2;
+ u_int32_t arglen; /* length of data */
+ u_int32_t cmd; /* command identifier */
+ u_int32_t flags; /* message status */
+ u_int32_t offset; /* fragmentation offset */
+ u_int32_t token; /* match with reply */
+ u_int32_t typecookie; /* node's type cookie */
+ u_char cmdstr[NG_CMDSTRSIZ]; /* cmd string + \0 */
+ } header;
+ char data[]; /* placeholder for actual data */
+};
+
/* This command is guaranteed to not alter data (or'd into the command). */
#define NGM_READONLY 0x10000000
/* This command is guaranteed to have a reply (or'd into the command). */
@@ -93,12 +110,15 @@
* Netgraph message header compatibility field
* Interfaces within the kernel are defined by a different
* value (see NG_ABI_VERSION in netgraph.h)
+ *
+ * Support both NGM_VERSION and NGM_VERSION2 as long as needed.
*/
-#define NG_VERSION 8
+#define NGM_VERSION 8
+#define NGM_VERSION2 9
/* Flags field flags */
-#define NGF_ORIG 0x00000000 /* the msg is the original request */
#define NGF_RESP 0x00000001 /* the message is a response */
+#define NGF_FRAG 0x00000002 /* more fragments (NGM_VERSION2 only) */
/* Type of a unique node ID. */
#define ng_ID_t uint32_t
@@ -383,7 +403,7 @@
+ (len), M_NETGRAPH_MSG, (how) | M_ZERO); \
if ((msg) == NULL) \
break; \
- (msg)->header.version = NG_VERSION; \
+ (msg)->header.version = NGM_VERSION; \
(msg)->header.typecookie = (cookie); \
(msg)->header.cmd = (cmdid); \
(msg)->header.arglen = (len); \
@@ -401,7 +421,7 @@
+ (len), M_NETGRAPH_MSG, (how) | M_ZERO); \
if ((rsp) == NULL) \
break; \
- (rsp)->header.version = NG_VERSION; \
+ (rsp)->header.version = NGM_VERSION; \
(rsp)->header.arglen = (len); \
(rsp)->header.token = (msg)->header.token; \
(rsp)->header.typecookie = (msg)->header.typecookie; \
@@ -420,7 +440,7 @@
+ (msg)->header.arglen, M_NETGRAPH_MSG, (how) | M_ZERO); \
if ((copy) == NULL) \
break; \
- (copy)->header.version = NG_VERSION; \
+ (copy)->header.version = NGM_VERSION; \
(copy)->header.arglen = (msg)->header.arglen; \
(copy)->header.token = (msg)->header.token; \
(copy)->header.typecookie = (msg)->header.typecookie; \
Index: sys/netgraph/ng_socket.c
===================================================================
--- sys/netgraph/ng_socket.c
+++ sys/netgraph/ng_socket.c
@@ -187,6 +187,7 @@
};
#define NGS_FLAG_NOLINGER 1 /* close with last hook */
+#define NGS_FLAG_FRAGMENT 2 /* allow fragmented packets */
/***************************************************************
Control sockets
@@ -263,7 +264,7 @@
msg = malloc(len + 1, M_NETGRAPH_MSG, M_WAITOK);
m_copydata(m, 0, len, (char *)msg);
- if (msg->header.version != NG_VERSION) {
+ if (msg->header.version != NGM_VERSION) {
free(msg, M_NETGRAPH_MSG);
error = EINVAL;
goto release;
Index: usr.sbin/ppp/ether.c
===================================================================
--- usr.sbin/ppp/ether.c
+++ usr.sbin/ppp/ether.c
@@ -246,9 +246,9 @@
if (NgRecvMsg(dev->cs, rep, sizeof msgbuf, NULL) <= 0)
break;
- if (rep->header.version != NG_VERSION) {
+ if (rep->header.version != NGM_VERSION) {
log_Printf(LogWARN, "%ld: Unexpected netgraph version, expected %ld\n",
- (long)rep->header.version, (long)NG_VERSION);
+ (long)rep->header.version, (long)NGM_VERSION);
break;
}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 10, 8:48 AM (21 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23496063
Default Alt Text
D23850.id68876.diff (7 KB)

Event Timeline