- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
请在问题中告诉我。我正在基于 CentOS x86_64 构建流量整形器,Linux 版本 2.6.32-431.3.1.el6.x86_64。所以,它有大约 10 个 u32 哈希表,所有的除数都是 256。在默认表 800 中,我对第 3 个八位字节进行哈希处理,并将数据包指向其中一个表,然后对第 4 个八位字节进行哈希处理,并将数据包指向描述每个用户带宽限制的类。因此,对于每个 IP 地址,都有一个相应的 tc 类。我们打算创建大约 3000 个 IP 地址。当我的脚本将此 IP 添加到哈希表中时,出现错误:RTNETLINK answers: File exists。更多代码在这里:
tc qdisc add dev $inet root handle 2: htb default 8000
tc class add dev $inet parent 2: classid 2:6000 htb rate 100mbit
#this hash-tables are for subnets
for i in {901..912}; do
tc filter add dev $inet parent 2: handle $i: protocol ip u32 divisor 256
done
#adding filters for packet classifying
tc filter add dev $inet protocol ip parent 2: u32 ht 800:: match ip src 172.16.16.0/20 hashkey mask 0x0000ff00 at 12 link 901:
tc filter add dev $inet protocol ip parent 2: u32 ht 901:11: match ip src 172.16.17.0/24 hashkey mask 0x000000ff at 12 link 902:
tc filter add dev $inet protocol ip parent 2: u32 ht 901:12: match ip src 172.16.18.0/24 hashkey mask 0x000000ff at 12 link 903:
#...
#and so on under "link 912:"
#creating classes for every host, place it under root class 2: (100mb for all)
for i in {1..2815}; do tc class add dev $inet parent 2:6000 classid 2:$i htb rate 1mbit ceil 6mbit; done
#place each host in corresponding u32 table
for i in {1..255}; do printf -v hi "%x" "$i";
tc filter add dev $inet protocol ip parent 2: u32 ht 902:$hi: match ip src 172.16.17.$i flowid 2:$i
done
for i in {256..511}; do let j="i-256"; printf -v hi "%x" "$j";
tc filter add dev $inet protocol ip parent 2: u32 ht 903:$hi: match ip src 172.16.18.$j flowid 2:$i
done
#....
#and so on under 2815 hosts
在命令结束后的某处
tc filter add dev eth0 protocol ip parent 2: u32 ht 909:dc: match ip src 172.16.24.220 flowid 2:2012
RTNETLINK answers: File exists
We have an error talking to the kernel
我无法解决这个问题,我以为Linux内核中有过滤器数量限制,但有人告诉我这不是真的,根本没有限制。没有重用 flowid,也没有哈希表句柄发生超限。还有什么可能导致代码中出现此错误?
最佳答案
我用另外两个内核重现了这个问题;现代的 Ubuntu 12.04 3.5.0-39-generic x86_64 内核和旧的 Fedora 2.6.33.3-85 i686 内核。它们都存在。
这里有一些 u32 过滤器文档:http://ace-host.stuart.id.au/russell/files/tc/doc/cls_u32.txt建议过滤器句柄的最后一部分,过滤器项目,应该上升到十六进制 0xFFF,即 4096(例如 901:0:0 到 901:0:FFF)。当您手动添加过滤器时,情况就是如此。但是,当您使用哈希添加过滤器时,您指定了哈希表和存储桶,但过滤器 ID 是自动创建的。
麻烦的是,自动创建的过滤器项是从 800 开始的,这意味着您实际上只能使用 0x800 到 0xFFE 过滤器(总共 2048 个)。
您会认为您可以为每添加 2048 个过滤器切换哈希表,就像您在示例中所做的那样,但事实并非如此 - 它仍然只允许您在哈希时总共添加 2048 个过滤器。我不确定此行为是错误、限制还是设计使然。
要解决此问题,您可以通过将过滤器项 ID 放在 u32 过滤器声明之前手动指定过滤器项 ID,它必须具有零哈希表和存储桶 ID。这将允许您添加完整的 4096 个过滤器,其中涵盖了您的子网声明。它似乎还允许为每个哈希表添加 4096 个过滤器,因此您可以通过链接到另一个哈希表来添加更多过滤器。脚本的最后一部分需要像这样:
#place each host in corresponding u32 table
for i in {1..255}; do
printf -v hi "%x" "$i";
tc filter add dev $inet protocol ip parent 2: handle ::$hi u32 ht 902:$hi: match ip src 172.16.17.$i flowid 2:$i
done
for i in {256..511}; do
let j="i-256";
printf -v hi "%x" "$i";
printf -v hj "%x" "$j";
tc filter add dev $inet protocol ip parent 2: handle ::$hi u32 ht 903:$hj: match ip src 172.16.18.$j flowid 2:$i
done
#....
#and so on under 2815 hosts
这是我测试过的代码,它与您的代码相同,但我对其进行了重组以仅使用一个哈希表。它应该具有相同的效率。它仅在最后一个八位字节上散列到所需的桶,然后顺序匹配桶内的过滤器,而不是顺序匹配并链接到子网,然后散列到一个桶。
#!/bin/bash
inet='eth0'
# Delete any existing traffic shaping
tc qdisc del dev $inet root
tc qdisc add dev $inet root handle 2: htb default 8000
tc class add dev $inet parent 2: classid 2:6000 htb rate 100mbit
# Create a single hash table (901) with 256 buckets
tc filter add dev $inet parent 2: handle 901: protocol ip u32 divisor 256
# Direct traffic from 172.16.16.0 - 172.16.31.255 to link 901, hash on last octet of src ip
tc filter add dev $inet protocol ip parent 2: u32 ht 800:: match ip src 172.16.16.0/20 hashkey mask 0x000000ff at 12 link 901:
# Create classes for each host, place it under root class 2: (100mb for all)
for i in {1..2815}; do
hex_handle=$(echo "obase=16; $i" | bc)
tc class add dev $inet parent 2:6000 classid 2:$hex_handle htb rate 1mbit ceil 6mbit || exit 1;
done
# Add filters for each possible host
for y in {16..27}; do
for x in {1..255}; do
j=$(( (($y - 16) * 255) + $x ));
hex_bucket=$(echo "obase=16; $x" | bc)
hex_handle=$(echo "obase=16; $j" | bc)
tc filter add dev $inet protocol ip parent 2: handle ::$hex_handle u32 ht 901:$hex_bucket match ip src 172.16.$y.$x flowid 2:$hex_handle || exit 1;
done
done
关于linux tc,u32过滤奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21454155/
我想调整我的 Linux 机器中的流量或控制带宽。但是我找不到任何与 Linux 中的 tc 命令功能相关的 API。正如您可能猜到的那样,我正在尝试使用 API 而不是命令。 任何建议都会有所帮助。
正如您在附图中看到的那样,根据 MediaInfo,我的文件中有两个不同的时间码。有没有办法将它们设置为不同的值? 谢谢你。 最佳答案 您可以使用 -timecode ffmpeg 的选项。 我有一个
请在问题中告诉我。我正在基于 CentOS x86_64 构建流量整形器,Linux 版本 2.6.32-431.3.1.el6.x86_64。所以,它有大约 10 个 u32 哈希表,所有的除数都是
我希望添加一组过滤器,这些过滤器会丢弃与参数匹配的数据包。似乎 tc 过滤器不支持基于匹配的丢弃操作,而是基于 qos 参数。有没有人能够放置 tc 下拉过滤器? 到目前为止,我发现的最常见的方法是使
我目前正在使用以下脚本: #!/bin/bash # # tc uses the following units when passed as a parameter. # kbps: Kilob
本文整理了Java中com.tc.util.ZipBuilder类的一些代码示例,展示了ZipBuilder类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平
我编写了一个脚本,可以让我通过 ts 限制我的带宽。 Ubuntu 18.04.5 LTS 上的工具。 问题是,即使上传速度正确限制在我在脚本上设置的限制,下载速度也不会被限制,我不明白为什么。 链接
我是使用 tc 命令的新手。 我正在编写一个测试脚本来为接口(interface)添加延迟。这是使用python和fabric api完成的 因此脚本将执行以下操作: sudo tc qdisc ad
我正在尝试使用命令 tc 模拟慢速网络链接.我用 netem模拟延迟和丢包,htb 模拟窄带宽,但我发现 netem 中有一个限制选项,这个选项有什么作用?会影响最终带宽吗? 我用谷歌搜索并在 htt
我已经成功安装了 spring 工具套件 n eclipse jee,现在正在设置 Pivotal tc 服务器,但我无法在 eclipse 中找到 Pivotal tc 服务器的安装目录。请帮忙..
我有 Spring Tool Suite (3.9.2.RELEASE),默认情况下它与 Pivotal TC Web 服务器一起提供,它是 Apache Tomcat 的一个变体。据我了解,为了为
我想让流量控制 TC 优先处理流量。例如,我需要 TCP 通过 band0,UDP 通过 band1,其他流量通过 band3。 我按如下方式创建 qdisc: tc qdisc add dev et
我第一次在 C 库中遇到以 .tc 和 .th 结尾的文件( http://www.vlfeat.org/api/files.html ,那里只列出了 .tc 文件。要查看 .th 文件,必须下载其源
很多时候,如果 mysql/mariadb 没有启动,因为像“无法初始化 tc.log”这样的错误,很多人建议删除这个文件。我想知道 mysql 在文件中存储了哪些信息。这是一个二进制文件,我找不到任
我尝试使用此命令为所有数据包添加固定数量的延迟(# tc qdisc add dev eth0 root netem delay 100ms) 输入后显示“找不到设备“eth0” 最佳答案 输入命令
我正在尝试使用 ubuntu 上的 tc 命令模拟来自源端口 7000 的 tcp 数据包的固定时间延迟。我使用的命令是: sudo tc qdisc add dev eth1 root handle
我正在做一个学校项目,在这个项目中我试图模拟缓冲区膨胀的网络现象。这本质上是延迟,由于内存价格便宜,路由器中的缓冲区随着时间的推移变得越来越大。 现在,为了开始这个项目,我已经对 linux“tc”-
我是 linux 的新手,我的目标是使用 tc 命令(或其他命令,如 ifconfig 或 iptables,但我认为我不需要它们)为“eth0”或“lo”创建一个简单的流量控制. 我的内核是 2.6
本文整理了Java中com.tc.admin.common.XScrollPane类的一些代码示例,展示了XScrollPane类的具体用法。这些代码示例主要来源于Github/Stackoverfl
本文整理了Java中com.tc.admin.common.XObjectTable类的一些代码示例,展示了XObjectTable类的具体用法。这些代码示例主要来源于Github/Stackover
我是一名优秀的程序员,十分优秀!