ahferroin7 n00b
Joined: 26 Nov 2014 Posts: 10
|
Posted: Wed Sep 28, 2016 1:31 pm Post subject: Issues with inconsistent udev behavior. |
|
|
I recently started working on tweaking some networking settings on my system to try to get better responsiveness. I got it all working fine with a script in /etc/local.d, but I'd really like to get it set up so that they get applied by udev rules since I would like the settings applied to any USB networking adapters and virtual network devices I set up on this system after boot. I'm using eudev-3.2 with the old style interface naming. The udev rules I'm using (in /etc/udev/rules.d/99-x-local.rules) are:
Code: |
KERNEL=="wlan*", SUBSYSTEM=="net", ACTION=="add", RUN(program)+="/usr/local/sbin/tc-setup.sh %E{INTERFACE}"
KERNEL=="eth*", SUBSYSTEM=="net", ACTION=="add", RUN(program)+="/usr/local/sbin/tc-setup.sh %E{INTERFACE}"
KERNEL=="tun*", SUBSYSTEM=="net", ACTION=="add", RUN(program)+="/usr/local/sbin/tc-setup.sh %E{INTERFACE}"
|
and /usr/local/sbin/tc-setup.sh contains:
Code: |
#!/bin/bash
info=`/sbin/tc qdisc show dev $1 2>&1`
root=`grep root <<< ${info}`
if ( echo ${root} | grep -q pfifo_fast ) ; then
/sbin/tc qdisc replace dev $1 handle 1 root prio
/sbin/tc qdisc add dev $1 handle 11 parent 1:1 sfq limit 100 perturb 5
/sbin/tc qdisc add dev $1 handle 12 parent 1:2 sfq limit 500 perturb 10
/sbin/tc qdisc add dev $1 handle 13 parent 1:3 sfq limit 1000 perturb 15
elif ( echo ${root} | grep -q mq ) ; then
queues=`grep -v mq <<< ${info} | wc -l`
for i in `seq $queues` ; do
/sbin/tc qdisc replace dev $1 handle ${i} parent :${i} prio
/sbin/tc qdisc add dev $1 handle ${i}1 parent ${i}:1 sfq limit 100 perturb 5
/sbin/tc qdisc add dev $1 handle ${i}2 parent ${i}:2 sfq limit 500 perturb 10
/sbin/tc qdisc add dev $1 handle ${i}3 parent ${i}:3 sfq limit 1000 perturb 15
done
fi
|
This runs correctly for tunX interfaces, but doesn't run for ethX or wlanX interfaces. It works find when invoked manually for any interface.
Output from `udevadm test --action=add /sys/class/net/eth0`:
Code: |
calling: test
version 3.2
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
=== trie on-disk ===
tool version: 3
file size: 7182940 bytes
header size 80 bytes
strings 1814700 bytes
nodes 5368160 bytes
Load module index
timestamp of '/etc/udev/rules.d' changed
timestamp of '/lib/udev/rules.d' changed
Skipping overridden file: /lib64/udev/rules.d/90-network.rules.
Skipping overridden file: /lib64/udev/rules.d/80-net-name-slot.rules.
Reading rules file: /lib64/udev/rules.d/10-dm.rules
Reading rules file: /lib64/udev/rules.d/11-dm-lvm.rules
Reading rules file: /lib64/udev/rules.d/11-dm-mpath.rules
Reading rules file: /lib64/udev/rules.d/13-dm-disk.rules
Reading rules file: /lib64/udev/rules.d/40-gentoo.rules
Reading rules file: /lib64/udev/rules.d/40-usb_modeswitch.rules
Reading rules file: /lib64/udev/rules.d/41-libsane.rules
Reading rules file: /lib64/udev/rules.d/42-logitech-unify-ltunify.rules
Reading rules file: /lib64/udev/rules.d/50-udev-default.rules
Reading rules file: /lib64/udev/rules.d/56-hpmud.rules
Reading rules file: /lib64/udev/rules.d/56-multipath.rules
Reading rules file: /lib64/udev/rules.d/60-block.rules
Reading rules file: /lib64/udev/rules.d/60-cdrom_id.rules
Reading rules file: /lib64/udev/rules.d/60-drm.rules
Reading rules file: /lib64/udev/rules.d/60-evdev.rules
Reading rules file: /lib64/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /lib64/udev/rules.d/60-persistent-input.rules
Reading rules file: /lib64/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /lib64/udev/rules.d/60-persistent-storage.rules
Reading rules file: /lib64/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /lib64/udev/rules.d/60-serial.rules
Reading rules file: /lib64/udev/rules.d/63-md-raid-arrays.rules
Reading rules file: /lib64/udev/rules.d/64-btrfs-dm.rules
Reading rules file: /lib64/udev/rules.d/64-btrfs.rules
Reading rules file: /lib64/udev/rules.d/64-md-raid-assembly.rules
Reading rules file: /lib64/udev/rules.d/65-kvm.rules
Reading rules file: /lib64/udev/rules.d/66-kpartx.rules
Reading rules file: /lib64/udev/rules.d/69-bcache.rules
Reading rules file: /lib64/udev/rules.d/69-dm-lvm-metad.rules
Reading rules file: /lib64/udev/rules.d/69-libmtp.rules
Reading rules file: /lib64/udev/rules.d/69-yubikey.rules
Reading rules file: /lib64/udev/rules.d/70-infrared.rules
Reading rules file: /lib64/udev/rules.d/70-mouse.rules
Reading rules file: /lib64/udev/rules.d/70-udev-acl.rules
Reading rules file: /lib64/udev/rules.d/70-yubikey.rules
Reading rules file: /lib64/udev/rules.d/75-net-description.rules
Reading rules file: /lib64/udev/rules.d/75-probe_mtd.rules
Reading rules file: /lib64/udev/rules.d/77-mm-cinterion-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-dell-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-ericsson-mbm.rules
Reading rules file: /lib64/udev/rules.d/77-mm-haier-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-huawei-net-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-longcheer-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-mtk-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-nokia-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-pcmcia-device-blacklist.rules
Reading rules file: /lib64/udev/rules.d/77-mm-platform-serial-whitelist.rules
Reading rules file: /lib64/udev/rules.d/77-mm-simtech-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-telit-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-usb-device-blacklist.rules
Reading rules file: /lib64/udev/rules.d/77-mm-usb-serial-adapters-greylist.rules
Reading rules file: /lib64/udev/rules.d/77-mm-x22x-port-types.rules
Reading rules file: /lib64/udev/rules.d/77-mm-zte-port-types.rules
Reading rules file: /lib64/udev/rules.d/78-sound-card.rules
Reading rules file: /lib64/udev/rules.d/80-android.rules
Reading rules file: /lib64/udev/rules.d/80-drivers.rules
Reading rules file: /lib64/udev/rules.d/80-libinput-device-groups.rules
Reading rules file: /lib64/udev/rules.d/80-mm-candidate.rules
Skipping empty file: /etc/udev/rules.d/80-net-name-slot.rules
Reading rules file: /lib64/udev/rules.d/80-stelladaptor-joystick.rules
Reading rules file: /lib64/udev/rules.d/80-udisks2.rules
Reading rules file: /lib64/udev/rules.d/84-nm-drivers.rules
Reading rules file: /lib64/udev/rules.d/85-nm-unmanaged.rules
Reading rules file: /lib64/udev/rules.d/85-regulatory.rules
Reading rules file: /lib64/udev/rules.d/90-alsa-restore.rules
Reading rules file: /lib64/udev/rules.d/90-libinput-model-quirks.rules
Skipping empty file: /etc/udev/rules.d/90-network.rules
Reading rules file: /lib64/udev/rules.d/90-pulseaudio.rules
Reading rules file: /lib64/udev/rules.d/95-dm-notify.rules
Reading rules file: /lib64/udev/rules.d/95-upower-csr.rules
Reading rules file: /lib64/udev/rules.d/95-upower-hid.rules
Reading rules file: /lib64/udev/rules.d/95-upower-wup.rules
Reading rules file: /lib64/udev/rules.d/97-hid2hci.rules
Reading rules file: /lib64/udev/rules.d/99-HTC-Vive-perms.rules
Reading rules file: /lib64/udev/rules.d/99-fuse.rules
Reading rules file: /lib64/udev/rules.d/99-iscsi.rules
Reading rules file: /lib64/udev/rules.d/99-ntfs3g.rules
Reading rules file: /lib64/udev/rules.d/99-pcscd-hotplug.rules
Reading rules file: /lib64/udev/rules.d/99-steam-controller-perms.rules
Reading rules file: /lib64/udev/rules.d/99-wispy.rules
Reading rules file: /etc/udev/rules.d/99-x-local.rules
rules contain 393216 bytes tokens (32768 * 12 bytes), 33018 bytes strings
24752 strings (204218 bytes), 21274 de-duplicated (174679 bytes), 3479 trie nodes used
IMPORT builtin 'net_id' /lib64/udev/rules.d/75-net-description.rules:6
IMPORT builtin 'hwdb' /lib64/udev/rules.d/75-net-description.rules:12
RUN '/usr/local/sbin/tc-setup.sh %E{INTERFACE}' /etc/udev/rules.d/99-x-local.rules:25
created db file '/run/udev/data/n3' for '/devices/pci0000:00/0000:00:1f.6/net/eth0'
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1f.6/net/eth0
ID_BUS=pci
ID_MM_CANDIDATE=1
ID_MODEL_FROM_DATABASE=Ethernet Connection I219-V
ID_MODEL_ID=0x1570
ID_NET_NAME_MAC=enx1c3947133089
ID_NET_NAME_PATH=enp0s31f6
ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Intel Corporation
ID_VENDOR_ID=0x8086
IFINDEX=3
INTERFACE=eth0
SUBSYSTEM=net
USEC_INITIALIZED=5965947
run: '/usr/local/sbin/tc-setup.sh eth0'
Unload module index
|
indicates that /usr/local/sbin/tc-setup.sh should be getting run when eth0 gets processed, but it isn't.
At this point, I've tried just about everything I can think of with the rules and script, and can't figure this out, so I'm hoping someone else might have some insight into why this isn't working. |
|