]>
git.proxmox.com Git - mirror_frr.git/blob - lib/checksum.h
1 #ifndef _FRR_CHECKSUM_H
2 #define _FRR_CHECKSUM_H
5 #include <netinet/in.h>
12 /* IPv4 pseudoheader */
19 } __attribute__((packed
));
21 /* IPv6 pseudoheader */
28 } __attribute__((packed
));
31 extern uint16_t in_cksumv(const struct iovec
*iov
, size_t iov_len
);
33 static inline uint16_t in_cksum(const void *data
, size_t nbytes
)
37 iov
[0].iov_base
= (void *)data
;
38 iov
[0].iov_len
= nbytes
;
39 return in_cksumv(iov
, array_size(iov
));
42 static inline uint16_t in_cksum_with_ph4(const struct ipv4_ph
*ph
,
43 const void *data
, size_t nbytes
)
47 iov
[0].iov_base
= (void *)ph
;
48 iov
[0].iov_len
= sizeof(*ph
);
49 iov
[1].iov_base
= (void *)data
;
50 iov
[1].iov_len
= nbytes
;
51 return in_cksumv(iov
, array_size(iov
));
54 static inline uint16_t in_cksum_with_ph6(const struct ipv6_ph
*ph
,
55 const void *data
, size_t nbytes
)
59 iov
[0].iov_base
= (void *)ph
;
60 iov
[0].iov_len
= sizeof(*ph
);
61 iov
[1].iov_base
= (void *)data
;
62 iov
[1].iov_len
= nbytes
;
63 return in_cksumv(iov
, array_size(iov
));
66 #define FLETCHER_CHECKSUM_VALIDATE 0xffff
67 extern uint16_t fletcher_checksum(uint8_t *, const size_t len
,
68 const uint16_t offset
);
74 #endif /* _FRR_CHECKSUM_H */