Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec3b67c1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (32 commits)
  [NetLabel]: correct usage of RCU locking
  [TCP]: fix D-SACK cwnd handling
  [NET] napi: use non-interruptible sleep in napi_disable
  [SCTP] net/sctp/auth.c: make 3 functions static
  [TCP]: Add missing I/O AT code to ipv6 side.
  [SCTP]: #if 0 sctp_update_copy_cksum()
  [INET]: Unexport icmpmsg_statistics
  [NET]: Unexport sock_enable_timestamp().
  [TCP]: Make tcp_match_skb_to_sack() static.
  [IRDA]: Make ircomm_tty static.
  [NET] fs/proc/proc_net.c: make a struct static
  [NET] dev_change_name: ignore changes to same name
  [NET]: Document some simple rules for actions
  [NET_CLS_ACT]: Use skb_act_clone
  [NET_CLS_ACT]: Introduce skb_act_clone
  [TCP]: Fix scatterlist handling in MD5 signature support.
  [IPSEC]: Fix scatterlist handling in skb_icv_walk().
  [IPSEC]: Add missing sg_init_table() calls to ESP.
  [CRYPTO]: Initialize TCRYPT on-stack scatterlist objects correctly.
  [CRYPTO]: HMAC needs some more scatterlist fixups.
  ...
parents e868171a 4be2700f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -184,14 +184,14 @@ tcp_frto - INTEGER
	F-RTO is an enhanced recovery algorithm for TCP retransmission
	timeouts.  It is particularly beneficial in wireless environments
	where packet loss is typically due to random radio interference
	rather than intermediate router congestion.  FRTO is sender-side
	rather than intermediate router congestion.  F-RTO is sender-side
	only modification.  Therefore it does not require any support from
	the peer, but in a typical case, however, where wireless link is
	the local access link and most of the data flows downlink, the
	faraway servers should have FRTO enabled to take advantage of it.
	faraway servers should have F-RTO enabled to take advantage of it.
	If set to 1, basic version is enabled.  2 enables SACK enhanced
	F-RTO if flow uses SACK.  The basic version can be used also when
	SACK is in use though scenario(s) with it exists where FRTO
	SACK is in use though scenario(s) with it exists where F-RTO
	interacts badly with the packet counting of the SACK enabled TCP
	flow.

+29 −0
Original line number Diff line number Diff line

The "enviromental" rules for authors of any new tc actions are:

1) If you stealeth or borroweth any packet thou shalt be branching
from the righteous path and thou shalt cloneth.

For example if your action queues a packet to be processed later
or intentionaly branches by redirecting a packet then you need to
clone the packet.
There are certain fields in the skb tc_verd that need to be reset so we
avoid loops etc. A few are generic enough so much so that skb_act_clone()
resets them for you. So invoke skb_act_clone() rather than skb_clone()

2) If you munge any packet thou shalt call pskb_expand_head in the case
someone else is referencing the skb. After that you "own" the skb.
You must also tell us if it is ok to munge the packet (TC_OK2MUNGE),
this way any action downstream can stomp on the packet.

3) dropping packets you dont own is a nono. You simply return
TC_ACT_SHOT to the caller and they will drop it.

The "enviromental" rules for callers of actions (qdiscs etc) are:

*) thou art responsible for freeing anything returned as being
TC_ACT_SHOT/STOLEN/QUEUED. If none of TC_ACT_SHOT/STOLEN/QUEUED is
returned then all is great and you dont need to do anything.

Post on netdev if something is unclear.
+5 −3
Original line number Diff line number Diff line
@@ -2449,13 +2449,15 @@ W: http://www.tazenda.demon.co.uk/phil/linux-hp
S:	Maintained

MAC80211
P:	Jiri Benc
M:	jbenc@suse.cz
P:	Michael Wu
M:	flamingice@sourmilk.net
P:	Johannes Berg
M:	johannes@sipsolutions.net
P:	Jiri Benc
M:	jbenc@suse.cz
L:	linux-wireless@vger.kernel.org
W:	http://linuxwireless.org/
T:	git kernel.org:/pub/scm/linux/kernel/git/jbenc/mac80211.git
T:	git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
S:	Maintained

MACVLAN DRIVER
+6 −4
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ static int hmac_setkey(struct crypto_hash *parent,
		desc.tfm = tfm;
		desc.flags = crypto_hash_get_flags(parent);
		desc.flags &= CRYPTO_TFM_REQ_MAY_SLEEP;
		sg_set_buf(&tmp, inkey, keylen);
		sg_init_one(&tmp, inkey, keylen);

		err = crypto_hash_digest(&desc, &tmp, keylen, digest);
		if (err)
@@ -96,7 +96,7 @@ static int hmac_init(struct hash_desc *pdesc)

	desc.tfm = ctx->child;
	desc.flags = pdesc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
	sg_set_buf(&tmp, ipad, bs);
	sg_init_one(&tmp, ipad, bs);

	err = crypto_hash_init(&desc);
	if (unlikely(err))
@@ -131,7 +131,7 @@ static int hmac_final(struct hash_desc *pdesc, u8 *out)

	desc.tfm = ctx->child;
	desc.flags = pdesc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
	sg_set_buf(&tmp, opad, bs + ds);
	sg_init_one(&tmp, opad, bs + ds);

	err = crypto_hash_final(&desc, digest);
	if (unlikely(err))
@@ -158,9 +158,11 @@ static int hmac_digest(struct hash_desc *pdesc, struct scatterlist *sg,
	desc.tfm = ctx->child;
	desc.flags = pdesc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;

	sg_init_table(sg1, 2);
	sg_set_buf(sg1, ipad, bs);
	sg_set_page(&sg1[1], (void *) sg, 0, 0);

	sg_set_page(&sg[1], (void *) sg, 0, 0);
	sg_init_table(sg2, 1);
	sg_set_buf(sg2, opad, bs + ds);

	err = crypto_hash_digest(&desc, sg1, nbytes + bs, digest);
+13 −11
Original line number Diff line number Diff line
@@ -139,7 +139,7 @@ static void test_hash(char *algo, struct hash_testvec *template,
		printk("test %u:\n", i + 1);
		memset(result, 0, 64);

		sg_set_buf(&sg[0], hash_tv[i].plaintext, hash_tv[i].psize);
		sg_init_one(&sg[0], hash_tv[i].plaintext, hash_tv[i].psize);

		if (hash_tv[i].ksize) {
			ret = crypto_hash_setkey(tfm, hash_tv[i].key,
@@ -176,6 +176,7 @@ static void test_hash(char *algo, struct hash_testvec *template,
			memset(result, 0, 64);

			temp = 0;
			sg_init_table(sg, hash_tv[i].np);
			for (k = 0; k < hash_tv[i].np; k++) {
				memcpy(&xbuf[IDX[k]],
				       hash_tv[i].plaintext + temp,
@@ -289,7 +290,7 @@ static void test_cipher(char *algo, int enc,
					goto out;
			}

			sg_set_buf(&sg[0], cipher_tv[i].input,
			sg_init_one(&sg[0], cipher_tv[i].input,
				    cipher_tv[i].ilen);

			ablkcipher_request_set_crypt(req, sg, sg,
@@ -353,6 +354,7 @@ static void test_cipher(char *algo, int enc,
			}

			temp = 0;
			sg_init_table(sg, cipher_tv[i].np);
			for (k = 0; k < cipher_tv[i].np; k++) {
				memcpy(&xbuf[IDX[k]],
				       cipher_tv[i].input + temp,
@@ -414,7 +416,7 @@ static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc, char *p,
	int bcount;
	int ret;

	sg_set_buf(sg, p, blen);
	sg_init_one(sg, p, blen);

	for (start = jiffies, end = start + sec * HZ, bcount = 0;
	     time_before(jiffies, end); bcount++) {
@@ -440,7 +442,7 @@ static int test_cipher_cycles(struct blkcipher_desc *desc, int enc, char *p,
	int ret = 0;
	int i;

	sg_set_buf(sg, p, blen);
	sg_init_one(sg, p, blen);

	local_bh_disable();
	local_irq_disable();
@@ -572,7 +574,7 @@ static int test_hash_jiffies_digest(struct hash_desc *desc, char *p, int blen,

	for (start = jiffies, end = start + sec * HZ, bcount = 0;
	     time_before(jiffies, end); bcount++) {
		sg_set_buf(sg, p, blen);
		sg_init_one(sg, p, blen);
		ret = crypto_hash_digest(desc, sg, blen, out);
		if (ret)
			return ret;
@@ -601,7 +603,7 @@ static int test_hash_jiffies(struct hash_desc *desc, char *p, int blen,
		if (ret)
			return ret;
		for (pcount = 0; pcount < blen; pcount += plen) {
			sg_set_buf(sg, p + pcount, plen);
			sg_init_one(sg, p + pcount, plen);
			ret = crypto_hash_update(desc, sg, plen);
			if (ret)
				return ret;
@@ -631,7 +633,7 @@ static int test_hash_cycles_digest(struct hash_desc *desc, char *p, int blen,

	/* Warm-up run. */
	for (i = 0; i < 4; i++) {
		sg_set_buf(sg, p, blen);
		sg_init_one(sg, p, blen);
		ret = crypto_hash_digest(desc, sg, blen, out);
		if (ret)
			goto out;
@@ -643,7 +645,7 @@ static int test_hash_cycles_digest(struct hash_desc *desc, char *p, int blen,

		start = get_cycles();

		sg_set_buf(sg, p, blen);
		sg_init_one(sg, p, blen);
		ret = crypto_hash_digest(desc, sg, blen, out);
		if (ret)
			goto out;
@@ -686,7 +688,7 @@ static int test_hash_cycles(struct hash_desc *desc, char *p, int blen,
		if (ret)
			goto out;
		for (pcount = 0; pcount < blen; pcount += plen) {
			sg_set_buf(sg, p + pcount, plen);
			sg_init_one(sg, p + pcount, plen);
			ret = crypto_hash_update(desc, sg, plen);
			if (ret)
				goto out;
@@ -706,7 +708,7 @@ static int test_hash_cycles(struct hash_desc *desc, char *p, int blen,
		if (ret)
			goto out;
		for (pcount = 0; pcount < blen; pcount += plen) {
			sg_set_buf(sg, p + pcount, plen);
			sg_init_one(sg, p + pcount, plen);
			ret = crypto_hash_update(desc, sg, plen);
			if (ret)
				goto out;
Loading