Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 15531
b: refs/heads/master
c: 57cca05
h: refs/heads/master
i:
  15529: ba13db3
  15527: 1233145
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo authored and David S. Miller committed Jan 3, 2006
1 parent ff3b9fd commit 9d3c593
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 15 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: af05dc9394feb193d221bc9d4c6db768facb4b40
refs/heads/master: 57cca05af1e20fdc65b55be52c042c234f86c866
5 changes: 3 additions & 2 deletions trunk/net/dccp/input.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ static int dccp_rcv_request_sent_state_process(struct sock *sk,
dccp_set_state(sk, DCCP_PARTOPEN);

/* Make sure socket is routed, for correct metrics. */
inet_sk_rebuild_header(sk);
icsk->icsk_af_ops->rebuild_header(sk);

if (!sock_flag(sk, SOCK_DEAD)) {
sk->sk_state_change(sk);
Expand Down Expand Up @@ -444,7 +444,8 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
*/
if (sk->sk_state == DCCP_LISTEN) {
if (dh->dccph_type == DCCP_PKT_REQUEST) {
if (dccp_v4_conn_request(sk, skb) < 0)
if (inet_csk(sk)->icsk_af_ops->conn_request(sk,
skb) < 0)
return 1;

/* FIXME: do congestion control initialization */
Expand Down
23 changes: 23 additions & 0 deletions trunk/net/dccp/ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,15 @@ void dccp_v4_err(struct sk_buff *skb, u32 info)
sock_put(sk);
}

/* This routine computes an IPv4 DCCP checksum. */
static void dccp_v4_send_check(struct sock *sk, int len, struct sk_buff *skb)
{
const struct inet_sock *inet = inet_sk(sk);
struct dccp_hdr *dh = dccp_hdr(skb);

dh->dccph_checksum = dccp_v4_checksum(skb, inet->saddr, inet->daddr);
}

int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code)
{
struct sk_buff *skb;
Expand Down Expand Up @@ -1195,6 +1204,19 @@ int dccp_v4_rcv(struct sk_buff *skb)
goto no_dccp_socket;
}

struct inet_connection_sock_af_ops dccp_ipv4_af_ops = {
.queue_xmit = ip_queue_xmit,
.send_check = dccp_v4_send_check,
.rebuild_header = inet_sk_rebuild_header,
.conn_request = dccp_v4_conn_request,
.syn_recv_sock = dccp_v4_request_recv_sock,
.net_header_len = sizeof(struct iphdr),
.setsockopt = ip_setsockopt,
.getsockopt = ip_getsockopt,
.addr2sockaddr = inet_csk_addr2sockaddr,
.sockaddr_len = sizeof(struct sockaddr_in),
};

static int dccp_v4_init_sock(struct sock *sk)
{
struct dccp_sock *dp = dccp_sk(sk);
Expand Down Expand Up @@ -1240,6 +1262,7 @@ static int dccp_v4_init_sock(struct sock *sk)
inet_csk(sk)->icsk_rto = DCCP_TIMEOUT_INIT;
sk->sk_state = DCCP_CLOSED;
sk->sk_write_space = dccp_write_space;
inet_csk(sk)->icsk_af_ops = &dccp_ipv4_af_ops;
dp->dccps_mss_cache = 536;
dp->dccps_role = DCCP_ROLE_UNDEFINED;
dp->dccps_service = DCCP_SERVICE_INVALID_VALUE;
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/dccp/minisocks.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ struct sock *dccp_check_req(struct sock *sk, struct sk_buff *skb,
goto drop;
}

child = dccp_v4_request_recv_sock(sk, skb, req, NULL);
child = inet_csk(sk)->icsk_af_ops->syn_recv_sock(sk, skb, req, NULL);
if (child == NULL)
goto listen_overflow;

Expand Down
14 changes: 6 additions & 8 deletions trunk/net/dccp/output.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
{
if (likely(skb != NULL)) {
const struct inet_sock *inet = inet_sk(sk);
const struct inet_connection_sock *icsk = inet_csk(sk);
struct dccp_sock *dp = dccp_sk(sk);
struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
struct dccp_hdr *dh;
Expand Down Expand Up @@ -108,16 +109,15 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
break;
}

dh->dccph_checksum = dccp_v4_checksum(skb, inet->saddr,
inet->daddr);
icsk->icsk_af_ops->send_check(sk, skb->len, skb);

if (set_ack)
dccp_event_ack_sent(sk);

DCCP_INC_STATS(DCCP_MIB_OUTSEGS);

memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
err = ip_queue_xmit(skb, 0);
err = icsk->icsk_af_ops->queue_xmit(skb, 0);
if (err <= 0)
return err;

Expand All @@ -135,16 +135,14 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
unsigned int dccp_sync_mss(struct sock *sk, u32 pmtu)
{
struct dccp_sock *dp = dccp_sk(sk);
int mss_now;

/*
* FIXME: we really should be using the af_specific thing to support
* IPv6.
* mss_now = pmtu - tp->af_specific->net_header_len -
* sizeof(struct dccp_hdr) - sizeof(struct dccp_hdr_ext);
*/
mss_now = pmtu - sizeof(struct iphdr) - sizeof(struct dccp_hdr) -
sizeof(struct dccp_hdr_ext);
int mss_now = (pmtu - inet_csk(sk)->icsk_af_ops->net_header_len -
sizeof(struct dccp_hdr) - sizeof(struct dccp_hdr_ext));

/* Now subtract optional transport overhead */
mss_now -= dp->dccps_ext_header_len;
Expand Down Expand Up @@ -266,7 +264,7 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo)

int dccp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
{
if (inet_sk_rebuild_header(sk) != 0)
if (inet_csk(sk)->icsk_af_ops->rebuild_header(sk) != 0)
return -EHOSTUNREACH; /* Routing failure or similar. */

return dccp_transmit_skb(sk, (skb_cloned(skb) ?
Expand Down
9 changes: 6 additions & 3 deletions trunk/net/dccp/proto.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,9 @@ int dccp_setsockopt(struct sock *sk, int level, int optname,
int val;

if (level != SOL_DCCP)
return ip_setsockopt(sk, level, optname, optval, optlen);
return inet_csk(sk)->icsk_af_ops->setsockopt(sk, level,
optname, optval,
optlen);

if (optlen < sizeof(int))
return -EINVAL;
Expand Down Expand Up @@ -320,8 +322,9 @@ int dccp_getsockopt(struct sock *sk, int level, int optname,
int val, len;

if (level != SOL_DCCP)
return ip_getsockopt(sk, level, optname, optval, optlen);

return inet_csk(sk)->icsk_af_ops->getsockopt(sk, level,
optname, optval,
optlen);
if (get_user(len, optlen))
return -EFAULT;

Expand Down

0 comments on commit 9d3c593

Please sign in to comment.