* [PATCH 1/1] tcp: Replace constants with #define macros
@ 2011-12-20 3:32 Vijay Subramanian
2011-12-20 3:54 ` Vijay Subramanian
2011-12-20 10:27 ` David Laight
0 siblings, 2 replies; 7+ messages in thread
From: Vijay Subramanian @ 2011-12-20 3:32 UTC (permalink / raw)
To: netdev
Cc: David S. Miller, Eric Dumazet, ilpo.jarvinen, H.K. Jerry Chu,
Vijay Subramanian
to record the state of SACK/FACK and DSACK for better readability and maintenance.
Signed-off-by: Vijay Subramanian <subramanian.vijay@gmail.com>
---
include/linux/tcp.h | 5 +++++
include/net/tcp.h | 4 ++--
net/ipv4/syncookies.c | 2 +-
net/ipv4/tcp_input.c | 6 +++---
4 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 7f59ee9..874b043 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -238,6 +238,11 @@ struct tcp_sack_block {
u32 end_seq;
};
+/*These are used to set the sack_ok field in struct tcp_options_received */
+#define SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
+#define FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
+#define DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/
+
struct tcp_options_received {
/* PAWS/RTTM data */
long ts_recent_stamp;/* Time we stored ts_recent (for aging) */
diff --git a/include/net/tcp.h b/include/net/tcp.h
index a4f52e1..cbb943e 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -773,12 +773,12 @@ static inline int tcp_is_reno(const struct tcp_sock *tp)
static inline int tcp_is_fack(const struct tcp_sock *tp)
{
- return tp->rx_opt.sack_ok & 2;
+ return tp->rx_opt.sack_ok & FACK_ENABLED;
}
static inline void tcp_enable_fack(struct tcp_sock *tp)
{
- tp->rx_opt.sack_ok |= 2;
+ tp->rx_opt.sack_ok |= FACK_ENABLED;
}
static inline unsigned int tcp_left_out(const struct tcp_sock *tp)
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index 90f6544..dfba6a5 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -245,7 +245,7 @@ bool cookie_check_timestamp(struct tcp_options_received *tcp_opt, bool *ecn_ok)
if (!sysctl_tcp_timestamps)
return false;
- tcp_opt->sack_ok = (options >> 4) & 0x1;
+ tcp_opt->sack_ok = (options >> 4) & SACK_SEEN;
*ecn_ok = (options >> 5) & 1;
if (*ecn_ok && !sysctl_tcp_ecn)
return false;
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index f131d92..5cbc788 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -865,13 +865,13 @@ static void tcp_disable_fack(struct tcp_sock *tp)
/* RFC3517 uses different metric in lost marker => reset on change */
if (tcp_is_fack(tp))
tp->lost_skb_hint = NULL;
- tp->rx_opt.sack_ok &= ~2;
+ tp->rx_opt.sack_ok &= ~FACK_ENABLED;
}
/* Take a notice that peer is sending D-SACKs */
static void tcp_dsack_seen(struct tcp_sock *tp)
{
- tp->rx_opt.sack_ok |= 4;
+ tp->rx_opt.sack_ok |= DSACK_SEEN;
}
/* Initialize metrics on socket. */
@@ -3878,7 +3878,7 @@ void tcp_parse_options(const struct sk_buff *skb, struct tcp_options_received *o
case TCPOPT_SACK_PERM:
if (opsize == TCPOLEN_SACK_PERM && th->syn &&
!estab && sysctl_tcp_sack) {
- opt_rx->sack_ok = 1;
+ opt_rx->sack_ok = SACK_SEEN;
tcp_sack_reset(opt_rx);
}
break;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH 1/1] tcp: Replace constants with #define macros
2011-12-20 3:32 [PATCH 1/1] tcp: Replace constants with #define macros Vijay Subramanian
@ 2011-12-20 3:54 ` Vijay Subramanian
2011-12-20 10:27 ` David Laight
1 sibling, 0 replies; 7+ messages in thread
From: Vijay Subramanian @ 2011-12-20 3:54 UTC (permalink / raw)
To: netdev
Cc: David S. Miller, Eric Dumazet, ilpo.jarvinen, H.K. Jerry Chu,
Vijay Subramanian
On 19 December 2011 19:32, Vijay Subramanian
<subramanian.vijay@gmail.com> wrote:
> to record the state of SACK/FACK and DSACK for better readability and maintenance.
>
> Signed-off-by: Vijay Subramanian <subramanian.vijay@gmail.com>
> ---
> include/linux/tcp.h | 5 +++++
> include/net/tcp.h | 4 ++--
> net/ipv4/syncookies.c | 2 +-
> net/ipv4/tcp_input.c | 6 +++---
> 4 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/tcp.h b/include/linux/tcp.h
> index 7f59ee9..874b043 100644
> --- a/include/linux/tcp.h
> +++ b/include/linux/tcp.h
> @@ -238,6 +238,11 @@ struct tcp_sack_block {
> u32 end_seq;
> };
>
> +/*These are used to set the sack_ok field in struct tcp_options_received */
> +#define SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
> +#define FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
> +#define DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/
> +
> struct tcp_options_received {
> /* PAWS/RTTM data */
> long ts_recent_stamp;/* Time we stored ts_recent (for aging) */
> diff --git a/include/net/tcp.h b/include/net/tcp.h
> index a4f52e1..cbb943e 100644
> --- a/include/net/tcp.h
> +++ b/include/net/tcp.h
> @@ -773,12 +773,12 @@ static inline int tcp_is_reno(const struct tcp_sock *tp)
>
> static inline int tcp_is_fack(const struct tcp_sock *tp)
> {
> - return tp->rx_opt.sack_ok & 2;
> + return tp->rx_opt.sack_ok & FACK_ENABLED;
> }
>
> static inline void tcp_enable_fack(struct tcp_sock *tp)
> {
> - tp->rx_opt.sack_ok |= 2;
> + tp->rx_opt.sack_ok |= FACK_ENABLED;
> }
>
> static inline unsigned int tcp_left_out(const struct tcp_sock *tp)
> diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
> index 90f6544..dfba6a5 100644
> --- a/net/ipv4/syncookies.c
> +++ b/net/ipv4/syncookies.c
> @@ -245,7 +245,7 @@ bool cookie_check_timestamp(struct tcp_options_received *tcp_opt, bool *ecn_ok)
> if (!sysctl_tcp_timestamps)
> return false;
>
> - tcp_opt->sack_ok = (options >> 4) & 0x1;
> + tcp_opt->sack_ok = (options >> 4) & SACK_SEEN;
> *ecn_ok = (options >> 5) & 1;
> if (*ecn_ok && !sysctl_tcp_ecn)
> return false;
> diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
> index f131d92..5cbc788 100644
> --- a/net/ipv4/tcp_input.c
> +++ b/net/ipv4/tcp_input.c
> @@ -865,13 +865,13 @@ static void tcp_disable_fack(struct tcp_sock *tp)
> /* RFC3517 uses different metric in lost marker => reset on change */
> if (tcp_is_fack(tp))
> tp->lost_skb_hint = NULL;
> - tp->rx_opt.sack_ok &= ~2;
> + tp->rx_opt.sack_ok &= ~FACK_ENABLED;
> }
>
> /* Take a notice that peer is sending D-SACKs */
> static void tcp_dsack_seen(struct tcp_sock *tp)
> {
> - tp->rx_opt.sack_ok |= 4;
> + tp->rx_opt.sack_ok |= DSACK_SEEN;
> }
>
> /* Initialize metrics on socket. */
> @@ -3878,7 +3878,7 @@ void tcp_parse_options(const struct sk_buff *skb, struct tcp_options_received *o
> case TCPOPT_SACK_PERM:
> if (opsize == TCPOLEN_SACK_PERM && th->syn &&
> !estab && sysctl_tcp_sack) {
> - opt_rx->sack_ok = 1;
> + opt_rx->sack_ok = SACK_SEEN;
> tcp_sack_reset(opt_rx);
> }
> break;
> --
> 1.7.0.4
>
This patch was created against net-next tree and not -net tree.
Apologies for the error. Should I resend it?
Regards,
Vijay
^ permalink raw reply [flat|nested] 7+ messages in thread* RE: [PATCH 1/1] tcp: Replace constants with #define macros
2011-12-20 3:32 [PATCH 1/1] tcp: Replace constants with #define macros Vijay Subramanian
2011-12-20 3:54 ` Vijay Subramanian
@ 2011-12-20 10:27 ` David Laight
2011-12-20 20:02 ` Vijay Subramanian
1 sibling, 1 reply; 7+ messages in thread
From: David Laight @ 2011-12-20 10:27 UTC (permalink / raw)
To: Vijay Subramanian, netdev
Cc: David S. Miller, Eric Dumazet, ilpo.jarvinen, H.K. Jerry Chu
> diff --git a/include/linux/tcp.h b/include/linux/tcp.h
> index 7f59ee9..874b043 100644
> --- a/include/linux/tcp.h
> +++ b/include/linux/tcp.h
> @@ -238,6 +238,11 @@ struct tcp_sack_block {
> u32 end_seq;
> };
>
> +/*These are used to set the sack_ok field in struct
> tcp_options_received */
> +#define SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
> +#define FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
> +#define DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/
> +
Since that is a fairly public header, some namespace protection
might be sensible.
> - tcp_opt->sack_ok = (options >> 4) & 0x1;
> + tcp_opt->sack_ok = (options >> 4) & SACK_SEEN;
Looks to me like that 0x1 isn't SAC_SEEK! So this is now misleading.
David
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 1/1] tcp: Replace constants with #define macros
2011-12-20 10:27 ` David Laight
@ 2011-12-20 20:02 ` Vijay Subramanian
2011-12-20 20:18 ` David Miller
0 siblings, 1 reply; 7+ messages in thread
From: Vijay Subramanian @ 2011-12-20 20:02 UTC (permalink / raw)
To: David Laight
Cc: netdev, David S. Miller, Eric Dumazet, ilpo.jarvinen,
H.K. Jerry Chu
Thanks a lot for reviewing the patch. Please see responses below.
On 20 December 2011 02:27, David Laight <David.Laight@aculab.com> wrote:
>
>> +/*These are used to set the sack_ok field in struct
>> tcp_options_received */
>> +#define SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
>> +#define FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
>> +#define DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/
>> +
>
> Since that is a fairly public header, some namespace protection
> might be sensible.
I assume you are talking about collision with userspace. These
definitions are already protected by #ifdef __KERNEL__.
That should be enough to protect against collisions with userspace I think.
>
>> - tcp_opt->sack_ok = (options >> 4) & 0x1;
>> + tcp_opt->sack_ok = (options >> 4) & SACK_SEEN;
>
> Looks to me like that 0x1 isn't SAC_SEEK! So this is now misleading.
Can you please elaborate? Are you saying this is wrong or that it
could be done better?
Thanks for your time!
Vijay
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] tcp: Replace constants with #define macros
2011-12-20 20:02 ` Vijay Subramanian
@ 2011-12-20 20:18 ` David Miller
2011-12-21 9:57 ` David Laight
0 siblings, 1 reply; 7+ messages in thread
From: David Miller @ 2011-12-20 20:18 UTC (permalink / raw)
To: subramanian.vijay
Cc: David.Laight, netdev, eric.dumazet, ilpo.jarvinen, hkchu
From: Vijay Subramanian <subramanian.vijay@gmail.com>
Date: Tue, 20 Dec 2011 12:02:52 -0800
> I assume you are talking about collision with userspace. These
> definitions are already protected by #ifdef __KERNEL__.
> That should be enough to protect against collisions with userspace I think.
Within the kernel he means, please put a TCP_* prefix onto these
values.
>>
>>> - tcp_opt->sack_ok = (options >> 4) & 0x1;
>>> + tcp_opt->sack_ok = (options >> 4) & SACK_SEEN;
>>
>> Looks to me like that 0x1 isn't SAC_SEEK! So this is now misleading.
>
> Can you please elaborate? Are you saying this is wrong or that it
> could be done better?
I think he's saying it could be done better. Probably something
like:
tcp_opt->sack_ok = (options & (1 << 4)) ? SACK_SEEN : 0;
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH 1/1] tcp: Replace constants with #define macros
2011-12-20 20:18 ` David Miller
@ 2011-12-21 9:57 ` David Laight
2011-12-21 19:43 ` Vijay Subramanian
0 siblings, 1 reply; 7+ messages in thread
From: David Laight @ 2011-12-21 9:57 UTC (permalink / raw)
To: David Miller, subramanian.vijay
Cc: netdev, eric.dumazet, ilpo.jarvinen, hkchu
> > I assume you are talking about collision with userspace. These
> > definitions are already protected by #ifdef __KERNEL__.
> > That should be enough to protect against collisions with
> userspace I think.
>
> Within the kernel he means, please put a TCP_* prefix onto these
> values.
Given the values are currently:
> > +#define SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
> > +#define FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
> > +#define DSACK_SEEN (1 << 2) /*1 = DSACK was received from
peer*/
But the structure field member is 'sack_ok', unless it generates
very silly long lines - which in this case it probably doesn't -
it might even be worth prefixing with TCP_SACK_OK_ although
that might be deemed excessive!
David
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] tcp: Replace constants with #define macros
2011-12-21 9:57 ` David Laight
@ 2011-12-21 19:43 ` Vijay Subramanian
0 siblings, 0 replies; 7+ messages in thread
From: Vijay Subramanian @ 2011-12-21 19:43 UTC (permalink / raw)
To: David Laight; +Cc: David Miller, netdev, eric.dumazet, ilpo.jarvinen, hkchu
>
> Given the values are currently:
>
>> > +#define SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
>> > +#define FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
>> > +#define DSACK_SEEN (1 << 2) /*1 = DSACK was received from
> peer*/
>
> But the structure field member is 'sack_ok', unless it generates
> very silly long lines - which in this case it probably doesn't -
> it might even be worth prefixing with TCP_SACK_OK_ although
> that might be deemed excessive!
>
Thanks for all the feedback. I will follow these suggestions in future.
Vijay
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-12-21 19:43 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-20 3:32 [PATCH 1/1] tcp: Replace constants with #define macros Vijay Subramanian
2011-12-20 3:54 ` Vijay Subramanian
2011-12-20 10:27 ` David Laight
2011-12-20 20:02 ` Vijay Subramanian
2011-12-20 20:18 ` David Miller
2011-12-21 9:57 ` David Laight
2011-12-21 19:43 ` Vijay Subramanian
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox