Skip to content

Commit

Permalink
[DCCP]: tidy up dccp_v{4,6}_conn_request
Browse files Browse the repository at this point in the history
This is a code simplification to remove reduplicated code
by concentrating and abstracting shared code.

Detailed Changes:
  • Loading branch information
Gerrit Renker authored and David S. Miller committed Dec 3, 2006
1 parent f45b3ec commit cf55792
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 22 deletions.
13 changes: 1 addition & 12 deletions net/dccp/dccp.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,18 +155,7 @@ extern const char *dccp_state_name(const int state);
extern void dccp_set_state(struct sock *sk, const int state);
extern void dccp_done(struct sock *sk);

static inline void dccp_openreq_init(struct request_sock *req,
struct dccp_sock *dp,
struct sk_buff *skb)
{
/*
* FIXME: fill in the other req fields from the DCCP options
* received
*/
inet_rsk(req)->rmt_port = dccp_hdr(skb)->dccph_sport;
inet_rsk(req)->acked = 0;
req->rcv_wnd = 0;
}
extern void dccp_reqsk_init(struct request_sock *req, struct sk_buff *skb);

extern int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb);

Expand Down
9 changes: 3 additions & 6 deletions net/dccp/ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -636,11 +636,8 @@ static struct request_sock_ops dccp_request_sock_ops __read_mostly = {
int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
{
struct inet_request_sock *ireq;
struct dccp_sock dp;
struct request_sock *req;
struct dccp_request_sock *dreq;
const __be32 saddr = skb->nh.iph->saddr;
const __be32 daddr = skb->nh.iph->daddr;
const __be32 service = dccp_hdr_request(skb)->dccph_req_service;
struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
__u8 reset_code = DCCP_RESET_CODE_TOO_BUSY;
Expand Down Expand Up @@ -680,14 +677,14 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
if (dccp_parse_options(sk, skb))
goto drop_and_free;

dccp_openreq_init(req, &dp, skb);
dccp_reqsk_init(req, skb);

if (security_inet_conn_request(sk, skb, req))
goto drop_and_free;

ireq = inet_rsk(req);
ireq->loc_addr = daddr;
ireq->rmt_addr = saddr;
ireq->loc_addr = skb->nh.iph->daddr;
ireq->rmt_addr = skb->nh.iph->saddr;
req->rcv_wnd = dccp_feat_default_sequence_window;
ireq->opt = NULL;

Expand Down
7 changes: 3 additions & 4 deletions net/dccp/ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,6 @@ static struct sock *dccp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)

static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
{
struct dccp_sock dp;
struct request_sock *req;
struct dccp_request_sock *dreq;
struct inet6_request_sock *ireq6;
Expand Down Expand Up @@ -459,17 +458,17 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
if (req == NULL)
goto drop;

/* FIXME: process options */
if (dccp_parse_options(sk, skb))
goto drop_and_free;

dccp_openreq_init(req, &dp, skb);
dccp_reqsk_init(req, skb);

if (security_inet_conn_request(sk, skb, req))
goto drop_and_free;

ireq6 = inet6_rsk(req);
ipv6_addr_copy(&ireq6->rmt_addr, &skb->nh.ipv6h->saddr);
ipv6_addr_copy(&ireq6->loc_addr, &skb->nh.ipv6h->daddr);
req->rcv_wnd = dccp_feat_default_sequence_window;
ireq6->pktopts = NULL;

if (ipv6_opt_accepted(sk, skb) ||
Expand Down
9 changes: 9 additions & 0 deletions net/dccp/minisocks.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,3 +293,12 @@ void dccp_reqsk_send_ack(struct sk_buff *skb, struct request_sock *rsk)
}

EXPORT_SYMBOL_GPL(dccp_reqsk_send_ack);

void dccp_reqsk_init(struct request_sock *req, struct sk_buff *skb)
{
inet_rsk(req)->rmt_port = dccp_hdr(skb)->dccph_sport;
inet_rsk(req)->acked = 0;
req->rcv_wnd = dccp_feat_default_sequence_window;
}

EXPORT_SYMBOL_GPL(dccp_reqsk_init);

0 comments on commit cf55792

Please sign in to comment.