Re: Adding dsmark qdisc fails

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tero Saarni wrote:
I'm trying to configure dsmark qdisc on 2.6.11.4 user mode linux and
tc from iproute2-2.6.11-050314.

I think I have some mismatch in my setup since adding dsmark qdisc
fails *unless* I specify "set_tc_index" argument which I believe should
be optional:

# tc qdisc add dev eth1 handle 1:0 root dsmark indices 8
RTNETLINK answers: Invalid argument
Mar 20 13:00:50 user user.debug kernel: dsmark_init(sch a0bb3ae0,[qdisc a0bb3b60],opt 00000000)


here the log shows that opt is null, sch_dsmark checks for that and
bails out.  However running tc with "set_tc_index" goes ok:

# tc qdisc add dev eth1 handle 1:0 root dsmark indices 8 set_tc_index
Mar 20 13:01:12 user user.debug kernel: dsmark_init(sch a0bb3060,[qdisc a0bb30e0],opt a038e9d0)
Mar 20 13:01:12 user user.debug kernel: dsmark_init: qdisc a0bb30e0


# tc qdisc show dev eth1
qdisc dsmark 1: indices 0x0008 set_tc_index


but then changing the class fails:

# tc class change dev eth1 classid 1:1 dsmark mask 0x0 value 0xb8
RTNETLINK answers: Invalid argument
Mar 20 13:02:28 user user.debug kernel: dsmark_get(sch a0bb3060,[qdisc a0bb30e0],classid 10001)
Mar 20 13:02:28 user user.debug kernel: dsmark_change(sch a0bb3060,[qdisc a0bb30e0],classid 10001,parent 0),arg 0x2



Any ideas where I've gone wrong?

It is caused by this patch, the transformation to use NLMSG_TAIL is
not equivalent (it calculates the size of the aligned message). This
makes parsing the attributes in rtnetlink_rcv_msg() fail. I haven't checked what the exact problem is, Thomas, can you have a look at this
please?


Regards
Patrick
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx 
#   Transform rta_len calculations for nested TLVs to use NLMSG_TAIL
#   macro to simply code a lot.
# 
# tc/q_tbf.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/q_red.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -3
#   Use NLMSG_TAIL
# 
# tc/q_netem.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/q_htb.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +4 -4
#   Use NLMSG_TAIL
# 
# tc/q_hfsc.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/q_gred.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +4 -6
#   Use NLMSG_TAIL
# 
# tc/q_dsmark.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +4 -4
#   Use NLMSG_TAIL
# 
# tc/q_cbq.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +4 -4
#   Use NLMSG_TAIL
# 
# tc/q_atm.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/m_police.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/m_pedit.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -3
#   Use NLMSG_TAIL
# 
# tc/m_mirred.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -3
#   Use NLMSG_TAIL
# 
# tc/m_ipt.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -3
#   Use NLMSG_TAIL
# 
# tc/m_gact.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -3
#   Use NLMSG_TAIL
# 
# tc/m_action.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +17 -30
#   Use NLMSG_TAIL
# 
# tc/f_u32.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/f_tcindex.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/f_rsvp.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/f_route.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# tc/f_fw.c
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +2 -2
#   Use NLMSG_TAIL
# 
# include/libnetlink.h
#   2005/01/18 02:24:18+01:00 tgraf@xxxxxxx +3 -0
#   Add NLMSG_TAIL macro pointing to the tail of a netlink message
# 
diff -Nru a/include/libnetlink.h b/include/libnetlink.h
--- a/include/libnetlink.h	2005-03-20 15:54:37 +01:00
+++ b/include/libnetlink.h	2005-03-20 15:54:37 +01:00
@@ -46,5 +46,8 @@
 extern int rtnl_from_file(FILE *, rtnl_filter_t handler,
 		       void *jarg);
 
+#define NLMSG_TAIL(nmsg) \
+	((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
+
 #endif /* __LIBNETLINK_H__ */
 
diff -Nru a/tc/f_fw.c b/tc/f_fw.c
--- a/tc/f_fw.c	2005-03-20 15:54:37 +01:00
+++ b/tc/f_fw.c	2005-03-20 15:54:37 +01:00
@@ -50,7 +50,7 @@
 	if (argc == 0)
 		return 0;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 4096, TCA_OPTIONS, NULL, 0);
 
 	while (argc > 0) {
@@ -98,7 +98,7 @@
 		}
 		argc--; argv++;
 	}
-	tail->rta_len = (((void*)n)+n->nlmsg_len) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/f_route.c b/tc/f_route.c
--- a/tc/f_route.c	2005-03-20 15:54:37 +01:00
+++ b/tc/f_route.c	2005-03-20 15:54:37 +01:00
@@ -54,7 +54,7 @@
 	if (argc == 0)
 		return 0;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 4096, TCA_OPTIONS, NULL, 0);
 
 	while (argc > 0) {
@@ -125,7 +125,7 @@
 		}
 		argc--; argv++;
 	}
-	tail->rta_len = (((void*)n)+n->nlmsg_len) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	if (order) {
 		fh &= ~0x7F00;
 		fh |= (order<<8)&0x7F00;
diff -Nru a/tc/f_rsvp.c b/tc/f_rsvp.c
--- a/tc/f_rsvp.c	2005-03-20 15:54:37 +01:00
+++ b/tc/f_rsvp.c	2005-03-20 15:54:37 +01:00
@@ -189,7 +189,7 @@
 	if (argc == 0)
 		return 0;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 4096, TCA_OPTIONS, NULL, 0);
 
 	while (argc > 0) {
@@ -282,7 +282,7 @@
 
 	if (pinfo_ok)
 		addattr_l(n, 4096, TCA_RSVP_PINFO, &pinfo, sizeof(pinfo));
-	tail->rta_len = (((void*)n)+n->nlmsg_len) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/f_tcindex.c b/tc/f_tcindex.c
--- a/tc/f_tcindex.c	2005-03-20 15:54:37 +01:00
+++ b/tc/f_tcindex.c	2005-03-20 15:54:37 +01:00
@@ -43,7 +43,7 @@
 		}
 	}
 	if (!argc) return 0;
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n,4096,TCA_OPTIONS,NULL,0);
 	while (argc) {
 		if (!strcmp(*argv,"hash")) {
@@ -117,7 +117,7 @@
 		argc--;
 		argv++;
 	}
-	tail->rta_len = (((void*)n)+n->nlmsg_len) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/f_u32.c b/tc/f_u32.c
--- a/tc/f_u32.c	2005-03-20 15:54:37 +01:00
+++ b/tc/f_u32.c	2005-03-20 15:54:37 +01:00
@@ -794,7 +794,7 @@
 	if (argc == 0)
 		return 0;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, MAX_MSG, TCA_OPTIONS, NULL, 0);
 
 	while (argc > 0) {
@@ -943,7 +943,7 @@
 		addattr_l(n, MAX_MSG, TCA_U32_HASH, &htid, 4);
 	if (sel_ok)
 		addattr_l(n, MAX_MSG, TCA_U32_SEL, &sel, sizeof(sel.sel)+sel.sel.nkeys*sizeof(struct tc_u32_key));
-	tail->rta_len = (((void*)n)+n->nlmsg_len) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/m_action.c b/tc/m_action.c
--- a/tc/m_action.c	2005-03-20 15:54:37 +01:00
+++ b/tc/m_action.c	2005-03-20 15:54:37 +01:00
@@ -144,8 +144,7 @@
 	if (argc <= 0)
 		return -1;
 
-	tail = tail2 =
-	    (struct rtattr *) (((void *) n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = tail2 = NLMSG_TAIL(n);
 
 	addattr_l(n, MAX_MSG, tca_id, NULL, 0);
 
@@ -185,9 +184,7 @@
 				goto bad_val;
 			}
 
-			tail =
-			    (struct rtattr *) (((void *) n) +
-				       NLMSG_ALIGN(n->nlmsg_len));
+			tail = NLMSG_TAIL(n);
 			addattr_l(n, MAX_MSG, ++prio, NULL, 0);
 			addattr_l(n, MAX_MSG, TCA_ACT_KIND, k, strlen(k) + 1);
 
@@ -197,9 +194,7 @@
 				fprintf(stderr,"bad action parsing\n");
 				goto bad_val;
 			}
-			tail->rta_len =
-			    (((void *) n) + NLMSG_ALIGN(n->nlmsg_len)) -
-			    (void *) tail;
+			tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 			ok++;
 		}
 
@@ -210,8 +205,7 @@
 		goto bad_val;
 	}
 
-	tail2->rta_len =
-	    (((void *) n) + NLMSG_ALIGN(n->nlmsg_len)) - (void *) tail2;
+	tail2->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail2;
 
 done:
 	*argc_p = argc;
@@ -376,8 +370,7 @@
 	argv +=1;
 
 
-	tail = (struct rtattr*)(((void*)&req.n)+NLMSG_ALIGN(req.n.nlmsg_len));
-
+	tail = NLMSG_TAIL(&req.n);
 	addattr_l(&req.n, MAX_MSG, TCA_ACT_TAB, NULL, 0);
 
 	while (argc > 0) {
@@ -425,17 +418,15 @@
 			goto bad_val;
 		}
 
-	tail2 =
-	   (struct rtattr *) (((void *) &req.n) + NLMSG_ALIGN(req.n.nlmsg_len));
-	addattr_l(&req.n, MAX_MSG, ++prio, NULL, 0);
-	addattr_l(&req.n, MAX_MSG, TCA_ACT_KIND, k, strlen(k) + 1);
-	addattr32(&req.n, MAX_MSG, TCA_ACT_INDEX, i);
-	tail2->rta_len =
-	    (((void *) &req.n) + NLMSG_ALIGN(req.n.nlmsg_len)) - (void *) tail2;
+		tail2 = NLMSG_TAIL(&req.n);
+		addattr_l(&req.n, MAX_MSG, ++prio, NULL, 0);
+		addattr_l(&req.n, MAX_MSG, TCA_ACT_KIND, k, strlen(k) + 1);
+		addattr32(&req.n, MAX_MSG, TCA_ACT_INDEX, i);
+		tail2->rta_len = (void *) NLMSG_TAIL(&req.n) - (void *) tail2;
 
 	}
 
-	tail->rta_len = (((void*)&req.n)+ NLMSG_ALIGN(req.n.nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(&req.n) - (void *) tail;
 
 	if (rtnl_open(&rth, 0) < 0) {
 		fprintf(stderr, "Cannot open rtnetlink\n");
@@ -485,14 +476,14 @@
 	req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct tcamsg));
 	req.n.nlmsg_flags = NLM_F_REQUEST|flags;
 	req.n.nlmsg_type = cmd;
-	tail = (struct rtattr*)(((void*)&req.n)+NLMSG_ALIGN(req.n.nlmsg_len));
+	tail = NLMSG_TAIL(&req.n);
 	argc -=1;
 	argv +=1;
 	if (parse_action(&argc, &argv, TCA_ACT_TAB, &req.n)) {
 		fprintf(stderr, "Illegal \"action\"\n");
 		return -1;
 	}
-	tail->rta_len = (((void*)&req.n)+req.n.nlmsg_len) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(&req.n) - (void *) tail;
 
 	if (rtnl_open(&rth, 0) < 0) {
 		fprintf(stderr, "Cannot open rtnetlink\n");
@@ -530,11 +521,9 @@
 
 	req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct tcamsg));
 
-	tail = (struct rtattr*)(((void*)&req.n)+NLMSG_ALIGN(req.n.nlmsg_len));
-
+	tail = NLMSG_TAIL(&req.n);
 	addattr_l(&req.n, MAX_MSG, TCA_ACT_TAB, NULL, 0);
-	tail2 =
-	   (struct rtattr *) (((void *) &req.n) + NLMSG_ALIGN(req.n.nlmsg_len));
+	tail2 = NLMSG_TAIL(&req.n);
 
 	strncpy(k, *argv, sizeof (k) - 1);
 #ifdef CONFIG_GACT
@@ -555,10 +544,8 @@
 
 	addattr_l(&req.n, MAX_MSG, ++prio, NULL, 0);
 	addattr_l(&req.n, MAX_MSG, TCA_ACT_KIND, k, strlen(k) + 1);
-	tail2->rta_len =
-	    (((void *) &req.n) + NLMSG_ALIGN(req.n.nlmsg_len)) - (void *) tail2;
-	tail->rta_len = (((void*)&req.n)+NLMSG_ALIGN(req.n.nlmsg_len)) - (void*)tail;
-
+	tail2->rta_len = (void *) NLMSG_TAIL(&req.n) - (void *) tail2;
+	tail->rta_len = (void *) NLMSG_TAIL(&req.n) - (void *) tail;
 
 	if (rtnl_open(&rth, 0) < 0) {
 		fprintf(stderr, "Cannot open rtnetlink\n");
diff -Nru a/tc/m_gact.c b/tc/m_gact.c
--- a/tc/m_gact.c	2005-03-20 15:54:37 +01:00
+++ b/tc/m_gact.c	2005-03-20 15:54:37 +01:00
@@ -177,7 +177,7 @@
 	if (!ok)
 		return -1;
 
-	tail = (struct rtattr *) (((void *) n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, MAX_MSG, tca_id, NULL, 0);
 	addattr_l(n, MAX_MSG, TCA_GACT_PARMS, &p, sizeof (p));
 #ifdef CONFIG_GACT_PROB
@@ -185,8 +185,7 @@
 		addattr_l(n, MAX_MSG, TCA_GACT_PROB, &pp, sizeof (pp));
 	}
 #endif
-	tail->rta_len =
-	    (((void *) n) + NLMSG_ALIGN(n->nlmsg_len)) - (void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 
 	*argc_p = argc;
 	*argv_p = argv;
diff -Nru a/tc/m_ipt.c b/tc/m_ipt.c
--- a/tc/m_ipt.c	2005-03-20 15:54:37 +01:00
+++ b/tc/m_ipt.c	2005-03-20 15:54:37 +01:00
@@ -547,7 +547,7 @@
 		}
 	}
 
-	tail = (struct rtattr *) (((void *) n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, MAX_MSG, tca_id, NULL, 0);
 	fprintf(stdout, "tablename: %s hook: %s\n ", tname, ipthooks[hook]);
 	fprintf(stdout, "\ttarget: ");
@@ -569,8 +569,7 @@
 	addattr_l(n, MAX_MSG, TCA_IPT_INDEX, &index, 4);
 	if (m)
 		addattr_l(n, MAX_MSG, TCA_IPT_TARG, m->t, m->t->u.target_size);
-	tail->rta_len =
-	    (((void *) n) + NLMSG_ALIGN(n->nlmsg_len)) - (void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 
 	argc -= optind;
 	argv += optind;
diff -Nru a/tc/m_mirred.c b/tc/m_mirred.c
--- a/tc/m_mirred.c	2005-03-20 15:54:37 +01:00
+++ b/tc/m_mirred.c	2005-03-20 15:54:37 +01:00
@@ -201,11 +201,10 @@
 	if (mirred_d)
 		fprintf(stdout, "Action %d device %s ifindex %d\n",p.action, d,p.ifindex);
 
-	tail = (struct rtattr *) (((void *) n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, MAX_MSG, tca_id, NULL, 0);
 	addattr_l(n, MAX_MSG, TCA_MIRRED_PARMS, &p, sizeof (p));
-	tail->rta_len =
-	    (((void *) n) + NLMSG_ALIGN(n->nlmsg_len)) - (void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 
 	*argc_p = argc;
 	*argv_p = argv;
diff -Nru a/tc/m_pedit.c b/tc/m_pedit.c
--- a/tc/m_pedit.c	2005-03-20 15:54:37 +01:00
+++ b/tc/m_pedit.c	2005-03-20 15:54:37 +01:00
@@ -534,11 +534,10 @@
 		}
 	}
 
-	tail = (struct rtattr *) (((void *) n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, MAX_MSG, tca_id, NULL, 0);
 	addattr_l(n, MAX_MSG, TCA_PEDIT_PARMS,&sel, sizeof(sel.sel)+sel.sel.nkeys*sizeof(struct tc_pedit_key));
-	tail->rta_len =
-	    (((void *) n) + NLMSG_ALIGN(n->nlmsg_len)) - (void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 
 	*argc_p = argc;
 	*argv_p = argv;
diff -Nru a/tc/m_police.c b/tc/m_police.c
--- a/tc/m_police.c	2005-03-20 15:54:37 +01:00
+++ b/tc/m_police.c	2005-03-20 15:54:37 +01:00
@@ -282,7 +282,7 @@
 		p.peakrate.mpu = mpu;
 	}
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, MAX_MSG, tca_id, NULL, 0);
 	addattr_l(n, MAX_MSG, TCA_POLICE_TBF, &p, sizeof(p));
 	if (p.rate.rate)
@@ -294,7 +294,7 @@
 	if (presult)
 		addattr32(n, MAX_MSG, TCA_POLICE_RESULT, presult);
 
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	res = 0;
 
 	*argc_p = argc;
diff -Nru a/tc/q_atm.c b/tc/q_atm.c
--- a/tc/q_atm.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_atm.c	2005-03-20 15:54:37 +01:00
@@ -179,12 +179,12 @@
 			perror("ioctl ATMARP_MKIP");
 			return -1;
 		}
-	tail = (struct rtattr *) (((void *) n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n,1024,TCA_OPTIONS,NULL,0);
 	addattr_l(n,1024,TCA_ATM_FD,&s,sizeof(s));
 	if (excess) addattr_l(n,1024,TCA_ATM_EXCESS,&excess,sizeof(excess));
 	if (hdr_len != -1) addattr_l(n,1024,TCA_ATM_HDR,hdr,hdr_len);
-	tail->rta_len = (((void *) n)+NLMSG_ALIGN(n->nlmsg_len))-(void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_cbq.c b/tc/q_cbq.c
--- a/tc/q_cbq.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_cbq.c	2005-03-20 15:54:37 +01:00
@@ -151,7 +151,7 @@
 	lss.change = TCF_CBQ_LSS_MAXIDLE|TCF_CBQ_LSS_EWMA|TCF_CBQ_LSS_AVPKT;
 	lss.avpkt = avpkt;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 1024, TCA_CBQ_RATE, &r, sizeof(r));
 	addattr_l(n, 1024, TCA_CBQ_LSSOPT, &lss, sizeof(lss));
@@ -162,7 +162,7 @@
 			printf("%u ", rtab[i]);
 		printf("\n");
 	}
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
@@ -385,7 +385,7 @@
 		lss.change |= TCF_CBQ_LSS_EWMA;
 	}
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	if (lss.change) {
 		lss.change |= TCF_CBQ_LSS_FLAGS;
@@ -405,7 +405,7 @@
 			printf("\n");
 		}
 	}
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_dsmark.c b/tc/q_dsmark.c
--- a/tc/q_dsmark.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_dsmark.c	2005-03-20 15:54:37 +01:00
@@ -71,7 +71,7 @@
 		explain();
 		return -1;
 	}
-	tail = (struct rtattr *) (((void *) n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n,1024,TCA_OPTIONS,NULL,0);
 	addattr_l(n,1024,TCA_DSMARK_INDICES,&ind,sizeof(ind));
 	if (dflt != -1) {
@@ -80,7 +80,7 @@
 	    addattr_l(n,1024,TCA_DSMARK_DEFAULT_INDEX,&tmp,sizeof(tmp));
 	}
 	if (set_tc_index) addattr_l(n,1024,TCA_DSMARK_SET_TC_INDEX,NULL,0);
-	tail->rta_len = (((void *) n)+n->nlmsg_len)-(void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
@@ -98,7 +98,7 @@
 	__u8 tmp;
 	char *end;
 
-	tail = (struct rtattr *) (((void *) n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n,1024,TCA_OPTIONS,NULL,0);
 	while (argc > 0) {
 		if (!strcmp(*argv,"mask")) {
@@ -126,7 +126,7 @@
 		argc--;
 		argv++;
 	}
-	tail->rta_len = (((void *) n)+n->nlmsg_len)-(void *) tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_gred.c b/tc/q_gred.c
--- a/tc/q_gred.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_gred.c	2005-03-20 15:54:37 +01:00
@@ -106,11 +106,10 @@
 }
 DPRINTF("TC_GRED: sending DPs=%d default=%d\n",opt.DPs,opt.def_DP);
 	n->nlmsg_flags|=NLM_F_CREATE;
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
-
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 1024, TCA_GRED_DPS, &opt, sizeof(struct tc_gred_sopt));
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 return 0;
 }
 /*
@@ -252,12 +251,11 @@
 	}
 	opt.Scell_log = wlog;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
-
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 1024, TCA_GRED_PARMS, &opt, sizeof(opt));
 	addattr_l(n, 1024, TCA_GRED_STAB, sbuf, 256);
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_hfsc.c b/tc/q_hfsc.c
--- a/tc/q_hfsc.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_hfsc.c	2005-03-20 15:54:37 +01:00
@@ -205,7 +205,7 @@
 		return -1;
 	}
 
-	tail = (struct rtattr*)(((void*)n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	if (rsc_ok)
@@ -215,7 +215,7 @@
 	if (usc_ok)
 		addattr_l(n, 1024, TCA_HFSC_USC, &usc, sizeof(usc));
 
-	tail->rta_len = (((void*)n) + NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_htb.c b/tc/q_htb.c
--- a/tc/q_htb.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_htb.c	2005-03-20 15:54:37 +01:00
@@ -93,10 +93,10 @@
 		}
 		argc--; argv++;
 	}
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 2024, TCA_HTB_INIT, &opt, NLMSG_ALIGN(sizeof(opt)));
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
@@ -224,12 +224,12 @@
 	opt.cbuffer = tc_calc_xmittime(opt.ceil.rate, cbuffer);
 	opt.ceil.cell_log = ccell_log;
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 2024, TCA_HTB_PARMS, &opt, sizeof(opt));
 	addattr_l(n, 3024, TCA_HTB_RTAB, rtab, 1024);
 	addattr_l(n, 4024, TCA_HTB_CTAB, ctab, 1024);
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_netem.c b/tc/q_netem.c
--- a/tc/q_netem.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_netem.c	2005-03-20 15:54:37 +01:00
@@ -213,7 +213,7 @@
 		argc--; argv++;
 	}
 
-	tail = (struct rtattr*)(((void*)n) + NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 
 	addattr_l(n, 1024, TCA_OPTIONS, &opt, sizeof(opt));
 	addattr_l(n, 1024, TCA_NETEM_CORR, &cor, sizeof(cor));
@@ -222,7 +222,7 @@
 		addattr_l(n, 32768, TCA_NETEM_DELAY_DIST,
 			  dist_data, dist_size*sizeof(dist_data[0]));
 	}
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_red.c b/tc/q_red.c
--- a/tc/q_red.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_red.c	2005-03-20 15:54:37 +01:00
@@ -149,12 +149,11 @@
 #endif
 	}
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
-
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 1024, TCA_RED_PARMS, &opt, sizeof(opt));
 	addattr_l(n, 1024, TCA_RED_STAB, sbuf, 256);
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
diff -Nru a/tc/q_tbf.c b/tc/q_tbf.c
--- a/tc/q_tbf.c	2005-03-20 15:54:37 +01:00
+++ b/tc/q_tbf.c	2005-03-20 15:54:37 +01:00
@@ -187,13 +187,13 @@
 		opt.peakrate.mpu = mpu;
 	}
 
-	tail = (struct rtattr*)(((void*)n)+NLMSG_ALIGN(n->nlmsg_len));
+	tail = NLMSG_TAIL(n);
 	addattr_l(n, 1024, TCA_OPTIONS, NULL, 0);
 	addattr_l(n, 2024, TCA_TBF_PARMS, &opt, sizeof(opt));
 	addattr_l(n, 3024, TCA_TBF_RTAB, rtab, 1024);
 	if (opt.peakrate.rate)
 		addattr_l(n, 4096, TCA_TBF_PTAB, ptab, 1024);
-	tail->rta_len = (((void*)n)+NLMSG_ALIGN(n->nlmsg_len)) - (void*)tail;
+	tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail;
 	return 0;
 }
 
_______________________________________________
LARTC mailing list
LARTC@xxxxxxxxxxxxxxx
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux