本文整理汇总了C++中csum_partial函数的典型用法代码示例。如果您正苦于以下问题:C++ csum_partial函数的具体用法?C++ csum_partial怎么用?C++ csum_partial使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了csum_partial函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: tcf_csum_ipv4_igmp
static int tcf_csum_ipv4_igmp(struct sk_buff *skb,
unsigned int ihl, unsigned int ipl)
{
struct igmphdr *igmph;
igmph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*igmph));
if (igmph == NULL)
return 0;
igmph->csum = 0;
skb->csum = csum_partial(igmph, ipl - ihl, 0);
igmph->csum = csum_fold(skb->csum);
skb->ip_summed = CHECKSUM_NONE;
return 1;
}
开发者ID:ARMWorks,项目名称:FA_2451_Linux_Kernel,代码行数:17,代码来源:act_csum.c
示例2: dccp_v4_verify_checksum
static int dccp_v4_verify_checksum(struct sk_buff *skb,
const __be32 saddr, const __be32 daddr)
{
struct dccp_hdr *dh = dccp_hdr(skb);
int checksum_len;
u32 tmp;
if (dh->dccph_cscov == 0)
checksum_len = skb->len;
else {
checksum_len = (dh->dccph_cscov + dh->dccph_x) * sizeof(u32);
checksum_len = checksum_len < skb->len ? checksum_len :
skb->len;
}
tmp = csum_partial((unsigned char *)dh, checksum_len, 0);
return csum_tcpudp_magic(saddr, daddr, checksum_len,
IPPROTO_DCCP, tmp) == 0 ? 0 : -1;
}
开发者ID:FatSunHYS,项目名称:OSCourseDesign,代码行数:18,代码来源:ipv4.c
示例3: os_info_check
void os_info_check(struct os_info *os_info)
{
if (os_info == NULL)
kdump_failed(EOS_INFO_MISSING);
if (((unsigned long) os_info) % PAGE_SIZE)
kdump_failed(EOS_INFO_MISSING);
if (!page_is_valid((unsigned long) os_info))
kdump_failed(EOS_INFO_MISSING);
if (os_info->magic != OS_INFO_MAGIC)
kdump_failed(EOS_INFO_MISSING);
if (csum_partial(&os_info->version_major, OS_INF0_CSUM_SIZE, 0) !=
os_info->csum)
kdump_failed(EOS_INFO_CSUM_FAILED);
if (os_info->version_major > OS_INFO_VERSION_MAJOR_SUPPORTED)
kdump_failed(EOS_INFO_VERSION);
if (os_info->crashkernel_addr == 0)
kdump_failed(EOS_INFO_NOCRASHKERNEL);
}
开发者ID:hreinecke,项目名称:s390-tools,代码行数:18,代码来源:kdump.c
示例4: gro_skb_checksum
/* Compute the whole skb csum in s/w and store it, then verify GRO csum
* starting from gro_offset.
*/
static __sum16 gro_skb_checksum(struct sk_buff *skb)
{
__sum16 sum;
skb->csum = skb_checksum(skb, 0, skb->len, 0);
NAPI_GRO_CB(skb)->csum = csum_sub(skb->csum,
csum_partial(skb->data, skb_gro_offset(skb), 0));
sum = csum_fold(NAPI_GRO_CB(skb)->csum);
if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE)) {
if (unlikely(!sum) && !skb->csum_complete_sw)
netdev_rx_csum_fault(skb->dev);
} else {
skb->ip_summed = CHECKSUM_COMPLETE;
skb->csum_complete_sw = 1;
}
return sum;
}
开发者ID:MaxChina,项目名称:linux,代码行数:21,代码来源:gre_offload.c
示例5: push_vlan
static int push_vlan(struct sk_buff *skb, const struct ovs_action_push_vlan *vlan)
{
if (unlikely(vlan_tx_tag_present(skb))) {
u16 current_tag;
/* push down current VLAN tag */
current_tag = vlan_tx_tag_get(skb);
if (!__vlan_put_tag(skb, current_tag))
return -ENOMEM;
if (get_ip_summed(skb) == OVS_CSUM_COMPLETE)
skb->csum = csum_add(skb->csum, csum_partial(skb->data
+ ETH_HLEN, VLAN_HLEN, 0));
}
__vlan_hwaccel_put_tag(skb, ntohs(vlan->vlan_tci) & ~VLAN_TAG_PRESENT);
return 0;
}
开发者ID:ninopy,项目名称:ovs-vxlan,代码行数:19,代码来源:actions.c
示例6: csum_partial
/* validate checksum of entire packet */
void csum_network_interface::test4(void)
{
/* we produced */
unsigned char pkt[]={
/* pseudo header */
0xfe,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x16,0x3e,0xff,0xfe,0x11,0x34,0x24,
0xff,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x3a,
/* icmp payload */
0x9b, 0x02, 0x39, 0x8d, 0x01, 0x40, 0x00, 0x01,
0x70, 0x61, 0x6e, 0x64, 0x6f, 0x72, 0x61, 0x20,
0x69, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x0a, 0x6c
};
unsigned short result = csum_partial(pkt, sizeof(pkt), 0);
result = (~result & 0xffff);
assert(result == 0);
}
开发者ID:linux-wpan,项目名称:unstrung,代码行数:21,代码来源:18-checksum.cpp
示例7: tcp_send_check
void tcp_send_check(struct sk_buff *skb) {
if (skb_is_nonlinear(skb)) {
skb_linearize(skb);
}
struct iphdr *ip_header = ip_hdr(skb);
struct tcphdr *tcp_header = tcp_hdr(skb);
unsigned int tcp_header_length = (skb->len - (ip_header->ihl << 2));
tcp_header->check = 0;
tcp_header->check = tcp_v4_check(
tcp_header_length,
ip_header->saddr,
ip_header->daddr,
csum_partial(
(char*)tcp_header,
tcp_header_length,
0
)
);
skb->ip_summed = CHECKSUM_NONE;
}
开发者ID:danielk1031,项目名称:NetworkDeviceDevelopment,代码行数:20,代码来源:main.c
示例8: memcpy
/* validate calculation of pseudo-header */
void csum_network_interface::test3(void)
{
struct ip6_hdr v6;
unsigned char src[]={
0xfe, 0x80, 0, 0, 0, 0, 0, 0,
0x2, 0x16, 0x3e, 0xff, 0xfe, 0x11, 0x34, 0x24
};
unsigned char dst[]={
0xff, 0x02, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1
};
memcpy(&v6.ip6_src.s6_addr, src, 16);
memcpy(&v6.ip6_dst.s6_addr, dst, 16);
unsigned int icmp_len = 24;
// 0000: fe 80 00 00 00 00 00 00 02 16 3e ff fe 11 34 24
// 0010: ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 01
// 0020: 00 00 00 18 00 00 00 3a
unsigned short icmp6sum = csum_ipv6_magic(&v6.ip6_src,
&v6.ip6_dst,
icmp_len, IPPROTO_ICMPV6,
0);
icmp6sum = (~icmp6sum & 0xffff);
unsigned char all[]={
0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x16, 0x3e, 0xff, 0xfe, 0x11, 0x34, 0x24,
0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3a
};
unsigned short result2 = csum_partial(all, 5*8, 0);
result2 = (~result2 & 0xffff);
printf("result2=%04x\n",result2);
assert(result2 == htons(0x8edd));
assert(icmp6sum == result2);
}
开发者ID:linux-wpan,项目名称:unstrung,代码行数:42,代码来源:18-checksum.cpp
示例9: push_vlan
static int push_vlan(struct sk_buff *skb, const struct ovs_action_push_vlan *vlan)
{
if (unlikely(vlan_tx_tag_present(skb))) {
u16 current_tag;
/* push down current VLAN tag */
current_tag = vlan_tx_tag_get(skb);
skb = vlan_insert_tag_set_proto(skb, skb->vlan_proto,
current_tag);
if (!skb)
return -ENOMEM;
if (skb->ip_summed == CHECKSUM_COMPLETE)
skb->csum = csum_add(skb->csum, csum_partial(skb->data
+ (2 * ETH_ALEN), VLAN_HLEN, 0));
}
__vlan_hwaccel_put_tag(skb, vlan->vlan_tpid, ntohs(vlan->vlan_tci) & ~VLAN_TAG_PRESENT);
return 0;
}
开发者ID:GAXUSXX,项目名称:G935FGaXusKernel2,代码行数:21,代码来源:actions.c
示例10: tcf_csum_ipv6_tcp
static int tcf_csum_ipv6_tcp(struct sk_buff *skb,
unsigned int ihl, unsigned int ipl)
{
struct tcphdr *tcph;
const struct ipv6hdr *ip6h;
tcph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*tcph));
if (tcph == NULL)
return 0;
ip6h = ipv6_hdr(skb);
tcph->check = 0;
skb->csum = csum_partial(tcph, ipl - ihl, 0);
tcph->check = csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr,
ipl - ihl, IPPROTO_TCP,
skb->csum);
skb->ip_summed = CHECKSUM_NONE;
return 1;
}
开发者ID:513855417,项目名称:linux,代码行数:21,代码来源:act_csum.c
示例11: nf_reject_ip6_tcphdr_put
void nf_reject_ip6_tcphdr_put(struct sk_buff *nskb,
const struct sk_buff *oldskb,
const struct tcphdr *oth, unsigned int otcplen)
{
struct tcphdr *tcph;
int needs_ack;
skb_reset_transport_header(nskb);
tcph = (struct tcphdr *)skb_put(nskb, sizeof(struct tcphdr));
/* Truncate to length (no data) */
tcph->doff = sizeof(struct tcphdr)/4;
tcph->source = oth->dest;
tcph->dest = oth->source;
if (oth->ack) {
needs_ack = 0;
tcph->seq = oth->ack_seq;
tcph->ack_seq = 0;
} else {
needs_ack = 1;
tcph->ack_seq = htonl(ntohl(oth->seq) + oth->syn + oth->fin +
otcplen - (oth->doff<<2));
tcph->seq = 0;
}
/* Reset flags */
((u_int8_t *)tcph)[13] = 0;
tcph->rst = 1;
tcph->ack = needs_ack;
tcph->window = 0;
tcph->urg_ptr = 0;
tcph->check = 0;
/* Adjust TCP checksum */
tcph->check = csum_ipv6_magic(&ipv6_hdr(nskb)->saddr,
&ipv6_hdr(nskb)->daddr,
sizeof(struct tcphdr), IPPROTO_TCP,
csum_partial(tcph,
sizeof(struct tcphdr), 0));
}
开发者ID:Chong-Li,项目名称:cse522,代码行数:40,代码来源:nf_reject_ipv6.c
示例12: csum_and_copy_from_user
__wsum csum_and_copy_from_user(const void __user *src, void *dst,
int len, __wsum sum, int *err_ptr)
{
unsigned int csum;
might_sleep();
*err_ptr = 0;
if (!len) {
csum = 0;
goto out;
}
if (unlikely((len < 0) || !access_ok(VERIFY_READ, src, len))) {
*err_ptr = -EFAULT;
csum = (__force unsigned int)sum;
goto out;
}
csum = csum_partial_copy_generic((void __force *)src, dst,
len, sum, err_ptr, NULL);
if (unlikely(*err_ptr)) {
int missing = __copy_from_user(dst, src, len);
if (missing) {
memset(dst + len - missing, 0, missing);
*err_ptr = -EFAULT;
} else {
*err_ptr = 0;
}
csum = csum_partial(dst, len, sum);
}
out:
return (__force __wsum)csum;
}
开发者ID:007kumarraja,项目名称:rockchip-rk3188-mk908,代码行数:39,代码来源:checksum_wrappers_64.c
示例13: ipv6_validate_packet_len
static bool ipv6_validate_packet_len(struct sk_buff *skb_in, struct sk_buff *skb_out)
{
struct ipv6hdr *ip6_hdr = ipv6_hdr(skb_out);
struct hdr_iterator iterator = HDR_ITERATOR_INIT(ip6_hdr);
unsigned int ipv6_mtu;
unsigned int ipv4_mtu;
if (skb_out->len <= skb_out->dev->mtu)
return true;
hdr_iterator_last(&iterator);
if (iterator.hdr_type == IPPROTO_ICMPV6) {
struct icmp6hdr *icmpv6_hdr = icmp6_hdr(skb_out);
if (is_icmp6_error(icmpv6_hdr->icmp6_type)) {
int new_packet_len = skb_out->dev->mtu;
int l3_payload_len = new_packet_len - (iterator.data - (void *) ip6_hdr);
skb_trim(skb_out, new_packet_len);
ip6_hdr->payload_len = cpu_to_be16(l3_payload_len);
icmpv6_hdr->icmp6_cksum = 0;
icmpv6_hdr->icmp6_cksum = csum_ipv6_magic(&ip6_hdr->saddr, &ip6_hdr->daddr,
l3_payload_len, IPPROTO_ICMPV6, csum_partial(icmpv6_hdr, l3_payload_len, 0));
return true;
}
}
ipv6_mtu = skb_out->dev->mtu;
ipv4_mtu = skb_in->dev->mtu;
log_debug("Packet is too large for the outgoing MTU and IPv6 routers don't do fragmentation. "
"Dropping...");
icmp_send(skb_in, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
cpu_to_be32(min_uint(ipv6_mtu, ipv4_mtu + 20)));
return false;
}
开发者ID:kuldeepin,项目名称:NAT64,代码行数:38,代码来源:send_packet.c
示例14: skb_copy_and_csum_datagram_iovec
/**
* skb_copy_and_csum_datagram_iovec - Copy and checkum skb to user iovec.
* @skb: skbuff
* @hlen: hardware length
* @iov: io vector
*
* Caller _must_ check that skb will fit to this iovec.
*
* Returns: 0 - success.
* -EINVAL - checksum failure.
* -EFAULT - fault during copy. Beware, in this case iovec
* can be modified!
*/
int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
int hlen, struct iovec *iov)
{
__wsum csum;
int chunk = skb->len - hlen;
if (!chunk)
return 0;
/* Skip filled elements.
* Pretty silly, look at memcpy_toiovec, though 8)
*/
while (!iov->iov_len)
iov++;
if (iov->iov_len < chunk) {
if (__skb_checksum_complete(skb))
goto csum_error;
if (skb_copy_datagram_iovec(skb, hlen, iov, chunk))
goto fault;
} else {
csum = csum_partial(skb->data, hlen, skb->csum);
if (skb_copy_and_csum_datagram(skb, hlen, iov->iov_base,
chunk, &csum))
goto fault;
if (csum_fold(csum))
goto csum_error;
if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
netdev_rx_csum_fault(skb->dev);
iov->iov_len -= chunk;
iov->iov_base += chunk;
}
return 0;
csum_error:
return -EINVAL;
fault:
return -EFAULT;
}
开发者ID:NKSG,项目名称:INTER_MANET_NS3,代码行数:51,代码来源:datagram.c
示例15: set_ect_ip
/* set ECT codepoint from IP header.
* return 0 if there was an error. */
static inline int
set_ect_ip(struct sk_buff **pskb, const struct ipt_ECN_info *einfo)
{
if (((*pskb)->nh.iph->tos & IPT_ECN_IP_MASK)
!= (einfo->ip_ect & IPT_ECN_IP_MASK)) {
u_int16_t diffs[2];
if (!skb_ip_make_writable(pskb, sizeof(struct iphdr)))
return 0;
diffs[0] = htons((*pskb)->nh.iph->tos) ^ 0xFFFF;
(*pskb)->nh.iph->tos &= ~IPT_ECN_IP_MASK;
(*pskb)->nh.iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK);
diffs[1] = htons((*pskb)->nh.iph->tos);
(*pskb)->nh.iph->check
= csum_fold(csum_partial((char *)diffs,
sizeof(diffs),
(*pskb)->nh.iph->check
^0xFFFF));
(*pskb)->nfcache |= NFC_ALTERED;
}
return 1;
}
开发者ID:xricson,项目名称:knoppix,代码行数:25,代码来源:ipt_ECN.c
示例16: csum_partial_copy_from_user
/*
* Copy from userspace and compute checksum. If we catch an exception
* then zero the rest of the buffer.
*/
unsigned int csum_partial_copy_from_user (const char *src, char *dst,
int len, unsigned int sum, int *err_ptr)
{
int missing;
#ifdef CONFIG_PHOENIX_FAST_CSUM
unsigned int csum;
#endif
might_sleep();
missing = copy_from_user(dst, src, len);
if (missing) {
memset(dst + len - missing, 0, missing);
*err_ptr = -EFAULT;
}
#ifdef CONFIG_PHOENIX_FAST_CSUM
local_irq_disable();
csum = xlr_csum_partial_nocopy(dst, len, sum);
local_irq_enable();
return csum;
#else
return csum_partial(dst, len, sum);
#endif
}
开发者ID:JacksonZhangkun,项目名称:linux-2.6,代码行数:27,代码来源:csum_partial_copy.c
示例17: udpv6_queue_rcv_skb
static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
{
#if defined(CONFIG_FILTER)
if (sk->filter && skb->ip_summed != CHECKSUM_UNNECESSARY) {
if ((unsigned short)csum_fold(csum_partial(skb->h.raw, skb->len, skb->csum))) {
UDP6_INC_STATS_BH(UdpInErrors);
IP6_INC_STATS_BH(Ip6InDiscards);
kfree_skb(skb);
return 0;
}
skb->ip_summed = CHECKSUM_UNNECESSARY;
}
#endif
if (sock_queue_rcv_skb(sk,skb)<0) {
UDP6_INC_STATS_BH(UdpInErrors);
IP6_INC_STATS_BH(Ip6InDiscards);
kfree_skb(skb);
return 0;
}
IP6_INC_STATS_BH(Ip6InDelivers);
UDP6_INC_STATS_BH(UdpInDatagrams);
return 0;
}
开发者ID:kevin-longkai,项目名称:edimax-br-6528n,代码行数:23,代码来源:udp.c
示例18: tcf_csum_ipv4_tcp
static int tcf_csum_ipv4_tcp(struct sk_buff *skb, unsigned int ihl,
unsigned int ipl)
{
struct tcphdr *tcph;
const struct iphdr *iph;
if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
return 1;
tcph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*tcph));
if (tcph == NULL)
return 0;
iph = ip_hdr(skb);
tcph->check = 0;
skb->csum = csum_partial(tcph, ipl - ihl, 0);
tcph->check = tcp_v4_check(ipl - ihl,
iph->saddr, iph->daddr, skb->csum);
skb->ip_summed = CHECKSUM_NONE;
return 1;
}
开发者ID:asmalldev,项目名称:linux,代码行数:23,代码来源:act_csum.c
示例19: qca_gmac_rx_qos
void
qca_gmac_rx_qos(athr_gmac_t *mac, struct sk_buff *skb)
{
uint16_t hdr_type = 0;
int tos;
struct ethhdr *eh;
unsigned short diffs[2];
/* extract the header */
hdr_type = *(uint16_t *)(skb->data + 12);
if ((hdr_type & HDR_PACKET_TYPE_MASK) == ATHR_NORMAL_PKT) {
/* get the priority from the header */
tos = AC_TO_ENET_TOS (((hdr_type >> HDR_PRIORITY_SHIFT) & HDR_PRIORITY_MASK));
#ifndef CONFIG_ATHR_VLAN_IGMP
athr_remove_hdr(mac,skb);
#endif
eh = (struct ethhdr *)skb->data;
if (eh->h_proto == __constant_htons(ETHERTYPE_IP))
{
struct iphdr *ip = (struct iphdr *)
(skb->data + sizeof (struct ethhdr));
/*
* IP frame: exclude ECN bits 0-1 and map DSCP bits 2-7
* from TOS byte.
*/
tos = (tos << TOS_ECN_SHIFT ) & TOS_ECN_MASK;
if ( tos != ip->tos ) {
diffs[0] = htons(ip->tos) ^ 0xFFFF;
ip->tos = ((ip->tos & ~(TOS_ECN_MASK)) | tos);
diffs[1] = htons(ip->tos);
ip->check = csum_fold(csum_partial((char *)diffs,
sizeof(diffs),ip->check ^ 0xFFFF));
}
skb->priority = tos;
}
}
开发者ID:KHATEEBNSIT,项目名称:AP,代码行数:37,代码来源:qca955x.c
示例20: push_vlan
static int push_vlan(struct sk_buff *skb, const struct ovs_action_push_vlan *vlan)
{
/*
* Push an eventual existing hardware accel VLAN tag to the skb first
* to maintain correct order.
*/
if (unlikely(vlan_tx_tag_present(skb))) {
u16 current_tag;
/* push down current VLAN tag */
current_tag = vlan_tx_tag_get(skb);
if (!__vlan_put_tag(skb, current_tag))
return -ENOMEM;
if (skb->ip_summed == CHECKSUM_COMPLETE)
skb->csum = csum_add(skb->csum, csum_partial(skb->data
+ ETH_HLEN, VLAN_HLEN, 0));
}
__vlan_put_tag(skb, ntohs(vlan->vlan_tci) & ~VLAN_TAG_PRESENT);
return 0;
}
开发者ID:daveti,项目名称:prov-kernel,代码行数:24,代码来源:actions.c
注:本文中的csum_partial函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论