mirror of https://github.com/ARMmbed/mbed-os.git
65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
/*
|
|
* Copyright (c) 2015-2017, Arm Limited and affiliates.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#ifndef IPV6_FRAGMENTATION_H_
|
|
#define IPV6_FRAGMENTATION_H_
|
|
|
|
#ifndef NO_IP_FRAGMENT_RX
|
|
|
|
#include "Common_Protocols/ipv6_constants.h"
|
|
#include "Core/include/ns_buffer.h"
|
|
|
|
/* How large a fragmented packet are we prepared to handle? */
|
|
/* Must be a multiple of 8. This default can be overridden. */
|
|
#ifndef IPV6_FRAG_MRU
|
|
#define IPV6_FRAG_MRU 1504
|
|
#endif
|
|
|
|
#if IPV6_FRAG_MRU & 7
|
|
#error IPV6_FRAG_MRU must be a multiple of 8
|
|
#endif
|
|
|
|
/* Note that the MRU above applies only to fragmented packets. RFC 2460 says:
|
|
*
|
|
* From each link to which a node is directly attached, the node must be
|
|
* able to accept packets as large as that link's MTU.
|
|
*
|
|
* The IP spec doesn't seem to be explicit, but it is generally assumed that the
|
|
* MRU should be greater than or equal to the MTU of every link - we shouldn't
|
|
* refuse a packet just because it was fragmented.
|
|
*/
|
|
|
|
#if IPV6_FRAG_MRU < IPV6_MIN_FRAG_MRU
|
|
#error "IPV6_MRU too small"
|
|
#endif
|
|
|
|
uint16_t ipv6_frag_set_mru(uint16_t frag_mru);
|
|
|
|
void ipv6_frag_timer(uint8_t secs);
|
|
buffer_t *ipv6_frag_up(buffer_t *buf, const uint8_t *ptr, uint8_t *nh_ptr, uint16_t payload_length);
|
|
#else
|
|
#define ipv6_set_frag_mru(frag_mru) 0
|
|
#define ipv6_frag_timer(secs) ((void) 0)
|
|
#endif /* NO_IP_FRAGMENT_RX */
|
|
|
|
#ifndef NO_IP_FRAGMENT_TX
|
|
buffer_t *ipv6_frag_down(buffer_t *dgram_buf);
|
|
#else
|
|
#define ipv6_frag_down(buf) buffer_free(buf)
|
|
#endif /* NO_IP_FRAGMENT_TX */
|
|
|
|
#endif /* IPV6_FRAGMENTATION_H_ */
|