44 lines
925 B
C
44 lines
925 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _NF_REJECT_H
|
|
#define _NF_REJECT_H
|
|
|
|
#include <linux/types.h>
|
|
#include <uapi/linux/in.h>
|
|
|
|
static inline bool nf_reject_verify_csum(struct sk_buff *skb, int dataoff,
|
|
__u8 proto)
|
|
{
|
|
/* Skip protocols that don't use 16-bit one's complement checksum
|
|
* of the entire payload.
|
|
*/
|
|
switch (proto) {
|
|
/* Protocols with optional checksums. */
|
|
case IPPROTO_UDP: {
|
|
const struct udphdr *udp_hdr;
|
|
struct udphdr _udp_hdr;
|
|
|
|
udp_hdr = skb_header_pointer(skb, dataoff,
|
|
sizeof(_udp_hdr),
|
|
&_udp_hdr);
|
|
if (!udp_hdr || udp_hdr->check)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
case IPPROTO_GRE:
|
|
|
|
/* Protocols with other integrity checks. */
|
|
case IPPROTO_AH:
|
|
case IPPROTO_ESP:
|
|
case IPPROTO_SCTP:
|
|
|
|
/* Protocols with partial checksums. */
|
|
case IPPROTO_UDPLITE:
|
|
case IPPROTO_DCCP:
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
#endif /* _NF_REJECT_H */
|