Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 6444
b: refs/heads/master
c: a84ffe4
h: refs/heads/master
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo authored and David S. Miller committed Aug 29, 2005
1 parent 512af29 commit be51da0
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 13 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: 0ac4f893f20ed524198da5ebf591fc0b9e2ced2f
refs/heads/master: a84ffe430342db6ee585a5038f3242a6b4112d69
7 changes: 5 additions & 2 deletions trunk/include/linux/dccp.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,9 @@ enum {
DCCPF_MAX_CCID_SPECIFIC = 255,
};

/* DCCP socket options */
#define DCCP_SOCKOPT_PACKET_SIZE 1

#ifdef __KERNEL__

#include <linux/in.h>
Expand Down Expand Up @@ -396,7 +399,7 @@ enum dccp_role {
* @dccps_timestamp_echo - latest timestamp received on a TIMESTAMP option
* @dccps_ext_header_len - network protocol overhead (IP/IPv6 options)
* @dccps_pmtu_cookie - Last pmtu seen by socket
* @dccps_avg_packet_size - FIXME: has to be set by the app thru some setsockopt or ioctl, CCID3 uses it
* @dccps_packet_size - Set thru setsockopt
* @dccps_role - Role of this sock, one of %dccp_role
* @dccps_ndp_count - number of Non Data Packets since last data packet
* @dccps_hc_rx_ackpkts - receiver half connection acked packets
Expand All @@ -417,7 +420,7 @@ struct dccp_sock {
unsigned long dccps_service;
struct timeval dccps_timestamp_time;
__u32 dccps_timestamp_echo;
__u32 dccps_avg_packet_size;
__u32 dccps_packet_size;
unsigned long dccps_ndp_count;
__u16 dccps_ext_header_len;
__u32 dccps_pmtu_cookie;
Expand Down
12 changes: 6 additions & 6 deletions trunk/net/dccp/ccids/ccid3.c
Original file line number Diff line number Diff line change
Expand Up @@ -672,9 +672,9 @@ static int ccid3_hc_tx_init(struct sock *sk)

memset(hctx, 0, sizeof(*hctx));

if (dp->dccps_avg_packet_size >= TFRC_MIN_PACKET_SIZE &&
dp->dccps_avg_packet_size <= TFRC_MAX_PACKET_SIZE)
hctx->ccid3hctx_s = (u16)dp->dccps_avg_packet_size;
if (dp->dccps_packet_size >= TFRC_MIN_PACKET_SIZE &&
dp->dccps_packet_size <= TFRC_MAX_PACKET_SIZE)
hctx->ccid3hctx_s = dp->dccps_packet_size;
else
hctx->ccid3hctx_s = TFRC_STD_PACKET_SIZE;

Expand Down Expand Up @@ -1058,9 +1058,9 @@ static int ccid3_hc_rx_init(struct sock *sk)

memset(hcrx, 0, sizeof(*hcrx));

if (dp->dccps_avg_packet_size >= TFRC_MIN_PACKET_SIZE &&
dp->dccps_avg_packet_size <= TFRC_MAX_PACKET_SIZE)
hcrx->ccid3hcrx_s = (u16)dp->dccps_avg_packet_size;
if (dp->dccps_packet_size >= TFRC_MIN_PACKET_SIZE &&
dp->dccps_packet_size <= TFRC_MAX_PACKET_SIZE)
hcrx->ccid3hcrx_s = dp->dccps_packet_size;
else
hcrx->ccid3hcrx_s = TFRC_STD_PACKET_SIZE;

Expand Down
52 changes: 48 additions & 4 deletions trunk/net/dccp/proto.c
Original file line number Diff line number Diff line change
Expand Up @@ -205,23 +205,67 @@ int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg)
int dccp_setsockopt(struct sock *sk, int level, int optname,
char __user *optval, int optlen)
{
dccp_pr_debug("entry\n");
struct dccp_sock *dp;
int err;
int val;

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

return -EOPNOTSUPP;
if (optlen < sizeof(int))
return -EINVAL;

if (get_user(val, (int __user *)optval))
return -EFAULT;

lock_sock(sk);

dp = dccp_sk(sk);
err = 0;

switch (optname) {
case DCCP_SOCKOPT_PACKET_SIZE:
dp->dccps_packet_size = val;
break;
default:
err = -ENOPROTOOPT;
break;
}

release_sock(sk);
return err;
}

int dccp_getsockopt(struct sock *sk, int level, int optname,
char __user *optval, int __user *optlen)
{
dccp_pr_debug("entry\n");
struct dccp_sock *dp;
int val, len;

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

return -EOPNOTSUPP;
if (get_user(len, optlen))
return -EFAULT;

len = min_t(unsigned int, len, sizeof(int));
if (len < 0)
return -EINVAL;

dp = dccp_sk(sk);

switch (optname) {
case DCCP_SOCKOPT_PACKET_SIZE:
val = dp->dccps_packet_size;
break;
default:
return -ENOPROTOOPT;
}

if (put_user(len, optlen) || copy_to_user(optval, &val, len))
return -EFAULT;

return 0;
}

int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
Expand Down

0 comments on commit be51da0

Please sign in to comment.