With clat ebpf offload of the receive path on 4.9+ P+ devices this just doesn't matter any more. Additionally: - this is *much* simpler, - reduces memory consumption, - eliminates the need for memory locking privs, - and allows us to increment max supported packet size, which fixes a long outstanding terrible bug wrt. GRO'ed packets being oversize and simply dropped. So, win, win, win. Test: git grep '(^|[^t])ring[.][ch]' git grep 'TP_FRAME_SIZE|TP_BLOCK_SIZE|TP_FRAMES|TP_FRAME_GAP|TP_NUM_BLOCKS|packet_ring|ring_create|ring_read' come up empty Verified ipv4 ping works on a flame device on an ipv6 only wireless network. Bug: 130253220 Test: atest clatd_test netd_integration_test Signed-off-by: Maciej Żenczykowski <maze@google.com> Change-Id: I676dfd16ffd2961f14a4e8fcd707c6f9f484e024
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/*
|
|
* Copyright 2011 Daniel Drown
|
|
*
|
|
* 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.
|
|
*
|
|
* config.h - configuration settings
|
|
*/
|
|
#ifndef __CONFIG_H__
|
|
#define __CONFIG_H__
|
|
|
|
#include <linux/if.h>
|
|
#include <netinet/in.h>
|
|
|
|
struct tun_data {
|
|
char device4[IFNAMSIZ];
|
|
int read_fd6, write_fd6, fd4;
|
|
};
|
|
|
|
struct clat_config {
|
|
struct in6_addr ipv6_local_subnet;
|
|
struct in_addr ipv4_local_subnet;
|
|
struct in6_addr plat_subnet;
|
|
const char *native_ipv6_interface;
|
|
};
|
|
|
|
extern struct clat_config Global_Clatd_Config;
|
|
|
|
/* function: ipv6_prefix_equal
|
|
* compares the /64 prefixes of two ipv6 addresses.
|
|
* a1 - first address
|
|
* a2 - second address
|
|
* returns: 0 if the subnets are different, 1 if they are the same.
|
|
*/
|
|
static inline int ipv6_prefix_equal(struct in6_addr *a1, struct in6_addr *a2) {
|
|
return !memcmp(a1, a2, 8);
|
|
}
|
|
|
|
#endif /* __CONFIG_H__ */
|