Skip to contentSkip to conversation

net: introduce helper macra CMSG_FOREACH_HDR

PATCH RESEND In review Gu Zheng 3 participants 4 messages Dec 5, 2014 – Dec 9, 2014

Subsystems (10)
lore
Share & tools
lore

Gu Zheng

author
#0 lore raw

PATCH RESEND 1/1 net: introduce helper macra CMSG_FOREACH_HDR

Introduce helper macra CMSG_FOREACH_HDR as a wrapper of the enumerating cmsghdr from msghdr, just cleanup.

---
 .../networking/timestamping/timestamping.c         |    4 +---
 .../networking/timestamping/txtimestamp.c          |    4 +---
 crypto/af_alg.c                                    |    2 +-
 include/linux/socket.h                             |    4 ++++
 net/core/scm.c                                     |    3 +--
 net/dccp/proto.c                                   |    5 ++---
 net/ipv4/ip_sockglue.c                             |    2 +-
 net/ipv6/datagram.c                                |    2 +-
 net/iucv/af_iucv.c                                 |    4 +---
 net/rds/send.c                                     |    4 ++--
 net/rxrpc/ar-output.c                              |    2 +-
 net/sctp/socket.c                                  |    3 +--
 12 files changed, 17 insertions(+), 22 deletions(-)
Documentation/networking/timestamping/timestamping.c +1 -3
index 5cdfd74..3106e88 100644
@@ -169,9 +169,7 @@ static void printpacket(struct msghdr *msg, int res,
 	       res,
 	       inet_ntoa(from_addr->sin_addr),
 	       msg->msg_controllen);
-	for (cmsg = CMSG_FIRSTHDR(msg);
-	     cmsg;
-	     cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		printf("   cmsg len %zu: ", cmsg->cmsg_len);
 		switch (cmsg->cmsg_level) {
 		case SOL_SOCKET:
Documentation/networking/timestamping/txtimestamp.c +1 -3
index b32fc2a..e44ef35 100644
@@ -149,9 +149,7 @@ static void __recv_errmsg_cmsg(struct msghdr *msg, int payload_len)
 	struct scm_timestamping *tss = NULL;
 	struct cmsghdr *cm;
 
-	for (cm = CMSG_FIRSTHDR(msg);
-	     cm && cm->cmsg_len;
-	     cm = CMSG_NXTHDR(msg, cm)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (cm->cmsg_level == SOL_SOCKET &&
 		    cm->cmsg_type == SCM_TIMESTAMPING) {
 			tss = (void *) CMSG_DATA(cm);
crypto/af_alg.c +1 -1
index 6a3ad80..3df7d53 100644
@@ -399,7 +399,7 @@ int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con)
 {
 	struct cmsghdr *cmsg;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg))
 			return -EINVAL;
 		if (cmsg->cmsg_level != SOL_ALG)
include/linux/socket.h +4 -0
index bb9b836..d4b592f 100644
@@ -94,6 +94,10 @@ struct cmsghdr {
 			     (cmsg)->cmsg_len <= (unsigned long) \
 			     ((mhdr)->msg_controllen - \
 			      ((char *)(cmsg) - (char *)(mhdr)->msg_control)))
+#define CMSG_FOREACH_HDR(cmsg, msg)  \
+	for (cmsg = CMSG_FIRSTHDR(msg); \
+	     cmsg; \
+	     cmsg = CMSG_NXTHDR(msg, cmsg))
 
 /*
  *	Get the next cmsg header
net/core/scm.c +1 -2
index b442e7e..e938c49 100644
@@ -129,8 +129,7 @@ int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *p)
 	struct cmsghdr *cmsg;
 	int err;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg))
-	{
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		err = -EINVAL;
 
 		/* Verify that cmsg_len is at least sizeof(struct cmsghdr) */
net/dccp/proto.c +2 -3
index 5ab6627..d449cc5 100644
@@ -703,7 +703,7 @@ EXPORT_SYMBOL_GPL(compat_dccp_getsockopt);
 
 static int dccp_msghdr_parse(struct msghdr *msg, struct sk_buff *skb)
 {
-	struct cmsghdr *cmsg = CMSG_FIRSTHDR(msg);
+	struct cmsghdr *cmsg;
 
 	/*
 	 * Assign an (opaque) qpolicy priority value to skb->priority.
@@ -717,8 +717,7 @@ static int dccp_msghdr_parse(struct msghdr *msg, struct sk_buff *skb)
 	 */
 	skb->priority = 0;
 
-	for (; cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) {
-
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg))
 			return -EINVAL;
 
net/ipv4/ip_sockglue.c +1 -1
index 9daf217..14a6f71 100644
@@ -192,7 +192,7 @@ int ip_cmsg_send(struct net *net, struct msghdr *msg, struct ipcm_cookie *ipc,
 	int err, val;
 	struct cmsghdr *cmsg;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg))
 			return -EINVAL;
 #if IS_ENABLED(CONFIG_IPV6)
net/ipv6/datagram.c +1 -1
index 2cdc383..9895b98 100644
@@ -640,7 +640,7 @@ int ip6_datagram_send_ctl(struct net *net, struct sock *sk,
 	int len;
 	int err = 0;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		int addr_type;
 
 		if (!CMSG_OK(msg, cmsg)) {
net/iucv/af_iucv.c +1 -3
index a089b6b..eae4e08 100644
@@ -1070,9 +1070,7 @@ static int iucv_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
 	txmsg.class = 0;
 
 	/* iterate over control messages */
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg;
-		cmsg = CMSG_NXTHDR(msg, cmsg)) {
-
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg)) {
 			err = -EINVAL;
 			goto out;
net/rds/send.c +2 -2
index 0a64541..1accb3e 100644
@@ -826,7 +826,7 @@ static int rds_rm_size(struct msghdr *msg, int data_len)
 	int cmsg_groups = 0;
 	int retval;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg))
 			return -EINVAL;
 
@@ -878,7 +878,7 @@ static int rds_cmsg_send(struct rds_sock *rs, struct rds_message *rm,
 	struct cmsghdr *cmsg;
 	int ret = 0;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg))
 			return -EINVAL;
 
net/rxrpc/ar-output.c +1 -1
index 0b4b9a7..f915e7e 100644
@@ -45,7 +45,7 @@ static int rxrpc_sendmsg_cmsg(struct rxrpc_sock *rx, struct msghdr *msg,
 	if (msg->msg_controllen == 0)
 		return -EINVAL;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, msg) {
 		if (!CMSG_OK(msg, cmsg))
 			return -EINVAL;
 
net/sctp/socket.c +1 -2
index 634a2ab..58834d7 100644
@@ -6592,8 +6592,7 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
 	struct cmsghdr *cmsg;
 	struct msghdr *my_msg = (struct msghdr *)msg;
 
-	for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL;
-	     cmsg = CMSG_NXTHDR(my_msg, cmsg)) {
+	CMSG_FOREACH_HDR(cmsg, my_msg) {
 		if (!CMSG_OK(my_msg, cmsg))
 			return -EINVAL;
 
Signature · 3 lines
1.7.7

.
#1 lore raw
Quoted 1 line · Gu Zheng

Introduce helper macra

macro

Quoted 2 lines

CMSG_FOREACH_HDR as a wrapper of the enumerating
cmsghdr from msghdr, just cleanup.

maybe better to use lower case "for_each_cmsg_hdr" or some such.

checkpatch would recognize that too as long as it
uses "for_each".

include/linux/socket.h

Quoted 1 line
include/linux/socket.h +0 -0

[]

Quoted 8 lines
include/linux/socket.h +4 -0
@@ -94,6 +94,10 @@ struct cmsghdr {
 			     (cmsg)->cmsg_len <= (unsigned long) \
 			     ((mhdr)->msg_controllen - \
 			      ((char *)(cmsg) - (char *)(mhdr)->msg_control)))
+#define CMSG_FOREACH_HDR(cmsg, msg)  \
+	for (cmsg = CMSG_FIRSTHDR(msg); \
+	     cmsg; \
+	     cmsg = CMSG_NXTHDR(msg, cmsg))
author
#2 lore raw

Hi Joe,
Thanks for your comment.

Quoted 4 lines · Joe Perches
Quoted 1 line · Gu Zheng

Introduce helper macra

macro

Ah~, it's a typo.

Quoted 6 lines
Quoted 3 lines

CMSG_FOREACH_HDR as a wrapper of the enumerating
cmsghdr from msghdr, just cleanup.

maybe better to use lower case "for_each_cmsg_hdr" or some such.

But this will make it out of the ordinary, as the existed ones are all upper.

David, what's your opinion?

Regards,
Gu

Quoted 22 lines

checkpatch would recognize that too as long as it
uses "for_each".

include/linux/socket.h

Quoted 1 line
include/linux/socket.h +0 -0

[]

include/linux/socket.h struct cmsghdr { · line 100

Quoted 8 lines
include/linux/socket.h +4 -0
@@ -94,6 +94,10 @@ struct cmsghdr {
 			     (cmsg)->cmsg_len <= (unsigned long) \
 			     ((mhdr)->msg_controllen - \
 			      ((char *)(cmsg) - (char *)(mhdr)->msg_control)))
+#define CMSG_FOREACH_HDR(cmsg, msg)  \
+	for (cmsg = CMSG_FIRSTHDR(msg); \
+	     cmsg; \
+	     cmsg = CMSG_NXTHDR(msg, cmsg))

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

maintainer
#3 lore raw

From: Gu Zheng <[email protected]>
Date: Fri, 5 Dec 2014 16:29:07 +0800

Quoted 15 lines

Hi Joe,
Thanks for your comment.

Quoted 4 lines · Joe Perches
Quoted 1 line · Gu Zheng

Introduce helper macra

macro

Ah~, it's a typo.

Quoted 4 lines
Quoted 3 lines

CMSG_FOREACH_HDR as a wrapper of the enumerating
cmsghdr from msghdr, just cleanup.

Quoted 7 lines
Quoted 2 lines

maybe better to use lower case "for_each_cmsg_hdr" or some such.

But this will make it out of the ordinary, as the existed ones are all upper.

David, what's your opinion?

I think lowercase looks much better.