Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F131569300
D23850.id68876.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
7 KB
Referenced Files
None
Subscribers
None
D23850.id68876.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D23850: netgraph: Allow larger messages in communication between kernel and user-space
Attached
Detach File
Event Timeline
Log In to Comment