Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 98087
b: refs/heads/master
c: 20c61fb
h: refs/heads/master
i:
  98085: 2795744
  98083: b4a8904
  98079: a98418a
v: v3
  • Loading branch information
YOSHIFUJI Hideaki committed Jun 12, 2008
1 parent 76aad4c commit 1f1af6b
Show file tree
Hide file tree
Showing 13 changed files with 68 additions and 43 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5cb960a80531211379f8f05c575725d7630098fe
refs/heads/master: 20c61fbd8deb2ada0ac3acecf6156a986dbfff2d
29 changes: 27 additions & 2 deletions trunk/net/dccp/ackvec.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,12 +290,12 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,

while (1) {
const u8 len = dccp_ackvec_len(av, index);
const u8 av_state = dccp_ackvec_state(av, index);
const u8 state = dccp_ackvec_state(av, index);
/*
* valid packets not yet in av_buf have a reserved
* entry, with a len equal to 0.
*/
if (av_state == DCCP_ACKVEC_STATE_NOT_RECEIVED &&
if (state == DCCP_ACKVEC_STATE_NOT_RECEIVED &&
len == 0 && delta == 0) { /* Found our
reserved seat! */
dccp_pr_debug("Found %llu reserved seat!\n",
Expand Down Expand Up @@ -325,6 +325,31 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
return -EILSEQ;
}

#ifdef CONFIG_IP_DCCP_DEBUG
void dccp_ackvector_print(const u64 ackno, const unsigned char *vector, int len)
{
dccp_pr_debug_cat("ACK vector len=%d, ackno=%llu |", len,
(unsigned long long)ackno);

while (len--) {
const u8 state = (*vector & DCCP_ACKVEC_STATE_MASK) >> 6;
const u8 rl = *vector & DCCP_ACKVEC_LEN_MASK;

dccp_pr_debug_cat("%d,%d|", state, rl);
++vector;
}

dccp_pr_debug_cat("\n");
}

void dccp_ackvec_print(const struct dccp_ackvec *av)
{
dccp_ackvector_print(av->av_buf_ackno,
av->av_buf + av->av_buf_head,
av->av_vec_len);
}
#endif

static void dccp_ackvec_throw_record(struct dccp_ackvec *av,
struct dccp_ackvec_record *avr)
{
Expand Down
14 changes: 4 additions & 10 deletions trunk/net/dccp/ccids/ccid3.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ static void ccid3_hc_tx_update_x(struct sock *sk, ktime_t *stamp)
} else if (ktime_us_delta(now, hctx->ccid3hctx_t_ld)
- (s64)hctx->ccid3hctx_rtt >= 0) {

hctx->ccid3hctx_x = min(2 * hctx->ccid3hctx_x, min_rate);
hctx->ccid3hctx_x = max(hctx->ccid3hctx_x,
hctx->ccid3hctx_x =
max(min(2 * hctx->ccid3hctx_x, min_rate),
scaled_div(((__u64)hctx->ccid3hctx_s) << 6,
hctx->ccid3hctx_rtt));
hctx->ccid3hctx_t_ld = now;
Expand Down Expand Up @@ -329,14 +329,8 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb)
hctx->ccid3hctx_x = rfc3390_initial_rate(sk);
hctx->ccid3hctx_t_ld = now;
} else {
/*
* Sender does not have RTT sample:
* - set fallback RTT (RFC 4340, 3.4) since a RTT value
* is needed in several parts (e.g. window counter);
* - set sending rate X_pps = 1pps as per RFC 3448, 4.2.
*/
hctx->ccid3hctx_rtt = DCCP_FALLBACK_RTT;
hctx->ccid3hctx_x = hctx->ccid3hctx_s;
/* Sender does not have RTT sample: X_pps = 1 pkt/sec */
hctx->ccid3hctx_x = hctx->ccid3hctx_s;
hctx->ccid3hctx_x <<= 6;
}
ccid3_update_send_interval(hctx);
Expand Down
8 changes: 8 additions & 0 deletions trunk/net/dccp/ccids/lib/tfrc.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ module_param(tfrc_debug, bool, 0444);
MODULE_PARM_DESC(tfrc_debug, "Enable debug messages");
#endif

extern int tfrc_tx_packet_history_init(void);
extern void tfrc_tx_packet_history_exit(void);
extern int tfrc_rx_packet_history_init(void);
extern void tfrc_rx_packet_history_exit(void);

extern int tfrc_li_init(void);
extern void tfrc_li_exit(void);

static int __init tfrc_module_init(void)
{
int rc = tfrc_li_init();
Expand Down
25 changes: 10 additions & 15 deletions trunk/net/dccp/ccids/lib/tfrc.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* (at your option) any later version.
*/
#include <linux/types.h>
#include <linux/math64.h>
#include <asm/div64.h>
#include "../../dccp.h"
/* internal includes that this module exports: */
#include "loss_interval.h"
Expand All @@ -29,19 +29,21 @@ extern int tfrc_debug;
#endif

/* integer-arithmetic divisions of type (a * 1000000)/b */
static inline u64 scaled_div(u64 a, u64 b)
static inline u64 scaled_div(u64 a, u32 b)
{
BUG_ON(b==0);
return div64_u64(a * 1000000, b);
a *= 1000000;
do_div(a, b);
return a;
}

static inline u32 scaled_div32(u64 a, u64 b)
static inline u32 scaled_div32(u64 a, u32 b)
{
u64 result = scaled_div(a, b);

if (result > UINT_MAX) {
DCCP_CRIT("Overflow: %llu/%llu > UINT_MAX",
(unsigned long long)a, (unsigned long long)b);
DCCP_CRIT("Overflow: a(%llu)/b(%u) > ~0U",
(unsigned long long)a, b);
return UINT_MAX;
}
return result;
Expand All @@ -56,14 +58,7 @@ static inline u32 tfrc_ewma(const u32 avg, const u32 newval, const u8 weight)
return avg ? (weight * avg + (10 - weight) * newval) / 10 : newval;
}

extern u32 tfrc_calc_x(u16 s, u32 R, u32 p);
extern u32 tfrc_calc_x_reverse_lookup(u32 fvalue);
extern u32 tfrc_calc_x(u16 s, u32 R, u32 p);
extern u32 tfrc_calc_x_reverse_lookup(u32 fvalue);

extern int tfrc_tx_packet_history_init(void);
extern void tfrc_tx_packet_history_exit(void);
extern int tfrc_rx_packet_history_init(void);
extern void tfrc_rx_packet_history_exit(void);

extern int tfrc_li_init(void);
extern void tfrc_li_exit(void);
#endif /* _TFRC_H_ */
8 changes: 4 additions & 4 deletions trunk/net/dccp/ccids/lib/tfrc_equation.c
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,7 @@ u32 tfrc_calc_x(u16 s, u32 R, u32 p)

EXPORT_SYMBOL_GPL(tfrc_calc_x);

/**
/*
* tfrc_calc_x_reverse_lookup - try to find p given f(p)
*
* @fvalue: function value to match, scaled by 1000000
Expand All @@ -676,11 +676,11 @@ u32 tfrc_calc_x_reverse_lookup(u32 fvalue)

/* Error cases. */
if (fvalue < tfrc_calc_x_lookup[0][1]) {
DCCP_WARN("fvalue %u smaller than resolution\n", fvalue);
return TFRC_SMALLEST_P;
DCCP_WARN("fvalue %d smaller than resolution\n", fvalue);
return tfrc_calc_x_lookup[0][1];
}
if (fvalue > tfrc_calc_x_lookup[TFRC_CALC_X_ARRSIZE - 1][0]) {
DCCP_WARN("fvalue %u exceeds bounds!\n", fvalue);
DCCP_WARN("fvalue %d exceeds bounds!\n", fvalue);
return 1000000;
}

Expand Down
8 changes: 4 additions & 4 deletions trunk/net/dccp/minisocks.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,12 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
/* See dccp_v4_conn_request */
newdmsk->dccpms_sequence_window = req->rcv_wnd;

newdp->dccps_gar = newdp->dccps_iss = dreq->dreq_iss;
dccp_update_gss(newsk, dreq->dreq_iss);

newdp->dccps_isr = dreq->dreq_isr;
newdp->dccps_gar = newdp->dccps_isr = dreq->dreq_isr;
dccp_update_gsr(newsk, dreq->dreq_isr);

newdp->dccps_iss = dreq->dreq_iss;
dccp_update_gss(newsk, dreq->dreq_iss);

/*
* SWL and AWL are initially adjusted so that they are not less than
* the initial Sequence Numbers received and sent, respectively:
Expand Down
4 changes: 1 addition & 3 deletions trunk/net/dccp/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,9 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq,
*
* CCID-specific options are ignored during connection setup, as
* negotiation may still be in progress (see RFC 4340, 10.3).
* The same applies to Ack Vectors, as these depend on the CCID.
*
*/
if (dreq != NULL && (opt >= 128 ||
opt == DCCPO_ACK_VECTOR_0 || opt == DCCPO_ACK_VECTOR_1))
if (dreq != NULL && opt >= 128)
goto ignore_option;

switch (opt) {
Expand Down
2 changes: 0 additions & 2 deletions trunk/net/dccp/output.c
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,6 @@ void dccp_send_ack(struct sock *sk)

EXPORT_SYMBOL_GPL(dccp_send_ack);

#if 0
/* FIXME: Is this still necessary (11.3) - currently nowhere used by DCCP. */
void dccp_send_delayed_ack(struct sock *sk)
{
Expand Down Expand Up @@ -539,7 +538,6 @@ void dccp_send_delayed_ack(struct sock *sk)
icsk->icsk_ack.timeout = timeout;
sk_reset_timer(sk, &icsk->icsk_delack_timer, timeout);
}
#endif

void dccp_send_sync(struct sock *sk, const u64 ackno,
const enum dccp_pkt_type pkt_type)
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/dccp/probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static int bufsize = 64 * 1024;

static const char procname[] = "dccpprobe";

static struct {
struct {
struct kfifo *fifo;
spinlock_t lock;
wait_queue_head_t wait;
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/ipv6/ipv6_sockglue.c
Original file line number Diff line number Diff line change
Expand Up @@ -874,6 +874,8 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
return -EINVAL;
if (copy_from_user(&gsf, optval, GROUP_FILTER_SIZE(0)))
return -EFAULT;
if (gsf.gf_group.ss_family != AF_INET6)
return -EADDRNOTAVAIL;
lock_sock(sk);
err = ip6_mc_msfget(sk, &gsf,
(struct group_filter __user *)optval, optlen);
Expand Down
3 changes: 2 additions & 1 deletion trunk/net/netfilter/nf_conntrack_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ destroy_conntrack(struct nf_conntrack *nfct)
if (l4proto && l4proto->destroy)
l4proto->destroy(ct);

nf_ct_ext_destroy(ct);

rcu_read_unlock();

spin_lock_bh(&nf_conntrack_lock);
Expand Down Expand Up @@ -518,7 +520,6 @@ static void nf_conntrack_free_rcu(struct rcu_head *head)

void nf_conntrack_free(struct nf_conn *ct)
{
nf_ct_ext_destroy(ct);
call_rcu(&ct->rcu, nf_conntrack_free_rcu);
}
EXPORT_SYMBOL_GPL(nf_conntrack_free);
Expand Down
4 changes: 4 additions & 0 deletions trunk/net/netfilter/nf_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ void nf_log_packet(int pf,
vsnprintf(prefix, sizeof(prefix), fmt, args);
va_end(args);
logger->logfn(pf, hooknum, skb, in, out, loginfo, prefix);
} else if (net_ratelimit()) {
printk(KERN_WARNING "nf_log_packet: can\'t log since "
"no backend logging module loaded in! Please either "
"load one, or disable logging explicitly\n");
}
rcu_read_unlock();
}
Expand Down

0 comments on commit 1f1af6b

Please sign in to comment.