1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * Copyright (c) 2022 Huawei Device Co., Ltd.
4 *
5 * Description: Provides some functionalities for
6 * checksum calculation in the NewIP protocol.
7 *
8 * Author: Yang Yanjun <yangyanjun@huawei.com>
9 *
10 * Data: 2022-07-18
11 */
12#ifndef _NIP_CHECKSUM_H
13#define _NIP_CHECKSUM_H
14
15#include "nip_addr.h"
16
17struct nip_pseudo_header {
18	struct nip_addr saddr;    /* Source address, network order.(big end) */
19	struct nip_addr daddr;    /* Destination address, network order.(big end) */
20	unsigned short check_len; /* network order.(big end) */
21	unsigned char nexthdr;    /* Upper-layer Protocol Type: IPPROTO_UDP */
22};
23
24/* The checksum is calculated when the packet is received
25 * Note:
26 * 1.chksum_header->check_len is network order.(big end)
27 * 2.data_len is host order.
28 */
29unsigned short nip_check_sum_parse(unsigned char *data,
30				   unsigned short check_len,
31				   struct nip_pseudo_header *chksum_header);
32
33/* The checksum is calculated when the packet is sent
34 * Note:
35 * 1.chksum_header->check_len is network order.(big end)
36 * 2.data_len is host order.
37 */
38unsigned short nip_check_sum_build(unsigned char *data,
39				   unsigned short data_len,
40				   struct nip_pseudo_header *chksum_header);
41
42#endif /* _NIP_CHECKSUM_H */
43
44