引用

BpfCoordinator.java - OpenGrok cross reference for /packages/modules/Connectivity/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.javahttp://aospxref.com/android-13.0.0_r3/xref/packages/modules/Connectivity/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java offload.c - OpenGrok cross reference for /packages/modules/Connectivity/bpf_progs/offload.chttp://aospxref.com/android-13.0.0_r3/xref/packages/modules/Connectivity/bpf_progs/offload.c


1. 拓扑

2. 相关命令

#工具链:
sudo apt install bison build-essential cmake flex git libedit-dev pkg-config libmnl-dev \zlib1g-dev libssl-dev libelf-dev libcap-dev libfl-dev llvm clang pkg-config \gcc-multilib luajit libluajit-5.1-dev libncurses5-dev libclang-dev clang-tools#怎样利用linux kernel编译ebpf程序:#1. 下载源码apt-cache search linux-sourceapt install linux-source-5.15.0#2. 拷贝并解压源码cp /usr/src/linux-source-5.15.0/linux-source-5.15.0.tar.bz2 ./tar -xvf linux-source-5.15.0.tar.bz2#3. 编译ebpf 程序cp /boot/config-$(uname -r) .configmake menuconfigmake modules_preparemake headers_installbpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.hmake M=samples/bpf VMLINUX_H=/home/vec/samba/tc/test/linux-source-5.15.0/vmlinux.h#4. 编写自己的ebpf程序和makefile#a. 添加 tc_tethering_user.c 和 tc_tethering_kern.c#b. 添加make rule到bpf folder下的Makefiletprogs-y += tc_tethering_usertc_tethering_user-objs := tc_tethering_user.oalways-y += tc_tethering_kern.o#5. 查看ebpf程序llvm-objdump -h tc_tethering_kern.ollvm-readelf -S tc_tethering_kern.o
ubuntu:#查找网卡的interface id, ip地址, mac地址ip addr show dev [NIC]#查找本地端口的局域网内的macip neighbor show dev [NIC] nud reachablearp [-i <if>] [-a] [<hostname>]#查找connect track记录conntrack -L#设置NAT和使能转发功能iptables -t nat -A POSTROUTING -o [upstream_nic_name]-s [client_ip_addr] -j SNAT --to [upstream_nic_ip_addr]iptables -t nat -L -necho 1 > /proc/sys/net/ipv4/ip_forwardiptables -t nat -F#加载和卸载tethering offload ingress ebpftc qdisc show dev ens34tc qdisc add dev ens34 clsacttc filter add dev ens34 ingress bpf da obj tc_tethering_kern sec sched_cls_tether_upstream4_ethertc qdisc show dev ens34 ingresstc filter del dev ens34 ingresstc qdisc del dev ens34 clsact#设定路由ip route add 172.16.6.0/24 via 172.16.2.254 dev eth0ip route add 8.8.8.8 via 172.16.2.254 dev eth0############################################
############################################windows: #Windows 设定特定路由, 网关(需要设置网卡的默认网关(图形化设定),设置特定路由的网关),使指定数据从指定的网卡出去。route printroute ADD 8.8.8.8 192.168.60.129  #server ip, downstream_nic iproute DELETE 8.8.8.8#网关(Gateway,又称为下一跳服务器):在发送IP数据包时,网关定义了针对特定的网络目的地址,#数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接#口,但是此时接口必须和网关一致;如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络#上的某个服务器或路由器。ping 8.8.8.8 ping 8.8.8.8 -S 192.168.60.1tcping64.exe 39.156.66.18  (www.baidu.com)

3. ebpf sample code

3.1 tc_tethering.h

3.1 tc_tethering_kern.c

3.3 tc_tethering_user.c

根据 邻居信息和connction track信息来自动添加 NAT rule和tc tethering offload rule。

tc ebpf sample - tethering offload on linux pc相关推荐

  1. 25美元 Linux PC 'Raspberry Pi' 一月上市

    为什么80%的码农都做不了架构师?>>> 盼望已久的信用卡大小.价值25美元的计算机 Raspberry Pi将于年初上市.第一轮Beta版设备已经处于测试之中.如果一切顺利,一月你 ...

  2. tc溜溜865手机投屏卡_溜溜tcgames老版本(电脑玩手机游戏)-溜溜TC Games32位/64位旧版本PC下载V2.0.0官网安卓真机投屏-西西软件下载...

    溜溜TC Games32位/64位旧版本PC是一款非常好用的手机游戏投屏工具,有了这款软件我们就可以将手机上的游戏画面投入到电脑上,大屏幕玩游戏,这样肯定会跟畅快,该软件是由成都杰华科技有限公司基于P ...

  3. 【linux】io_uring 和 eBPF 将如何彻底改变 Linux 中的编程

    1.概述 翻译:How io_uring and eBPF Will Revolutionize Programming in Linux 尘埃落定后,事情将不再相同.是的,我说的是 Linux. 在 ...

  4. anbox 使用情况_如何在Linux PC上启动并运行Anbox?

    目前 下面的教程教你如何在Linux PC上启动并运行Anbox 在你的Linux电脑上运行Android应用和游戏可以提高你的生产力,Android的应用相比电脑上的应用设计会比较简单的多,但是更加 ...

  5. 98rat_如何使用E4rat将Linux PC的启动时间缩短一半

    98rat Linux is pretty quick to boot on modern computers, but why not pare it down some more? If you' ...

  6. 我的Linux PC开发环境

    软件集成开发环境(代码编辑.浏览.编译.调试) Emacs            http://www.gnu.org/software/emacs/ Source-Navigator 5.2b2   ...

  7. kodi需要Linux桌面环境,Kodibuntu死了吗? 没有Linux的情况下将任何Linux PC变成HTPC | MOS86...

    Kodi是一款出色的开源家庭影院系统,并且由于其广泛的可用性,因此成为了顶级DIY媒体中心软件. 您可以将Kodi作为应用程序安装在Linux上,但是如果要构建专用的HTPC怎么办? 曾经,像Kodi ...

  8. 在Linux PC上查看arm交叉编译的可执行文件依赖的动态库

    在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC linux上的ldd命令.     在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件 ...

  9. linux系统手柄模拟器下载,Switch Amiibo模拟器(Windows|Linux PC + JoyControl + Bluetooth)...

    之前我发了一篇文章,介绍如何用安卓手机模拟switch的pro手柄刷amiibo,大家如果感兴趣可以点击我的那篇文章:蓝牙5.0安卓手机连接switch刷任意amiibo,不用白卡.但是如果你没有蓝牙 ...

最新文章

  1. CNN架构复现实战 | 附视频和github项目
  2. Python之compiler:compiler库的简介、安装、使用方法之详细攻略
  3. 未来物联网全栈开发 --JavaScript or Python?
  4. linux添加zip扩展
  5. ruby之添加当前文件路径到$LOAD_PATH
  6. php foreach 收邮件_php机制本身不提供多线程的操作,有了swoole就不一样了
  7. 例7.8 分析下列程序的输出结果。《计算机等级考试二级C++语言》
  8. php7扩展sphinx,php7进行安装sphinx简单记录
  9. 无线AP和无线路由的Wi-Fi性能哪个更好?
  10. 8.TCP/IP 详解卷1 --- Traceroute 程序
  11. Android天气预报详解
  12. 【MongoDB】MongoDB数据库介绍及常用指令详解
  13. 【数据分析实例】 7000 条北京的租房数据分析
  14. 一丶exit(1)丶exit(0)和return的区别
  15. 面向对象嵌入式系统开发7-嵌入式系统的实现
  16. python_docx读取word的内容
  17. Linux:root下的文件-anaconda-ks.cfg详解
  18. windows 下 用 dos 备份 oracle 数据库,并删除七天前的备份
  19. Word编辑技巧(图片、文本框居中)
  20. 跪求《HCNP/HCIE的培训内容

热门文章

  1. 作业帮-后台开发岗 面经
  2. 征信衍生、信用卡数据场景如何做好分析,这一种时序特征方法得学学|金融信用分析师必学内容
  3. 机械硬盘启动失败,总是转一下挺停一下
  4. 格美净水器:家用净水器必看的6点
  5. 项目管理心得体会(一)
  6. JS图片显示与隐藏案例
  7. 08s01 mysql_Mysql:SQL 错误 [08S01]: Communications link failure
  8. 5分钟外设学堂:耳机不响别慌,换个插头能救活!
  9. 图形处理之网格平滑vtkSmoothPolyDataFilter
  10. windows word2010 PPT