diff options
author | Breno Leitao <leitao@linux.vnet.ibm.com> | 2009-09-16 14:37:15 -0400 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2009-09-16 13:50:25 -0700 |
commit | cd8a0489f48f50eb0e1b7fa2f5289670cc26caa3 (patch) | |
tree | d96422a38c255bdf41173b4e3857f959a4eb697e | |
parent | ae98ab3529e00906645c9a2d0a30f36d9d534f3e (diff) | |
download | systemtap-steved-cd8a0489f48f50eb0e1b7fa2f5289670cc26caa3.tar.gz systemtap-steved-cd8a0489f48f50eb0e1b7fa2f5289670cc26caa3.tar.xz systemtap-steved-cd8a0489f48f50eb0e1b7fa2f5289670cc26caa3.zip |
Adding a some new probes to the networking.stp tapset
A tapset that helps those who are working with network devices.
These new fnctions try to cover almost all functions related to
these network devices.
Signed-off-by: Josh Stone <jistone@redhat.com>
-rw-r--r-- | tapset/networking.stp | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/tapset/networking.stp b/tapset/networking.stp index f6d78536..bcc99789 100644 --- a/tapset/networking.stp +++ b/tapset/networking.stp @@ -8,6 +8,12 @@ // <tapsetdescription> // This family of probe points is used to probe the activities of the network device. // </tapsetdescription> + +/* A function that returns the device name given the net_device struct */ +function get_netdev_name:string (addr:long) { + return kernel_string(@cast(addr, "net_device")->name) +} + /** * probe netdev.receive - Data recieved from network device. * @dev_name: The name of the device. e.g: eth0, ath1. @@ -78,3 +84,174 @@ probe netdev.transmit protocol = $skb->protocol truesize = $skb->truesize } + +/** + * probe netdev.change_mtu - Called when the netdev MTU is changed + * @dev_name: The device that will have the MTU changed + * @old_mtu: The current MTU + * @new_mtu: The new MTU + */ +probe netdev.change_mtu + = kernel.function("dev_set_mtu") +{ + old_mtu = $dev->mtu + new_mtu = $new_mtu + dev_name = get_netdev_name($dev) +} + +/** + * probe netdev.open - Called when the device is opened + * @dev_name: The device that is going to be opened + */ +probe netdev.open + = kernel.function("dev_open") +{ + dev_name = get_netdev_name($dev) +} + +/** + * probe netdev.close - Called when the device is closed + * @dev_name: The device that is going to be closed + */ +probe netdev.close + = kernel.function("dev_close") +{ + dev_name = get_netdev_name($dev) +} + +/** + * probe netdev.hard_transmit - Called when the devices is going to TX (hard) + * @dev_name: The device scheduled to transmit + * @protocol: The protocol used in the transmission + * @length: The length of the transmit buffer. + * @truesize: The size of the the data to be transmitted. + */ +probe netdev.hard_transmit + = kernel.function("dev_hard_start_xmit") +{ + dev_name = get_netdev_name($dev) + protocol = $skb->protocol + length = $skb->len + truesize = $skb->truesize +} + +/** + * probe netdev.rx - Called when the device is going to receive a packet + * @dev_name: The device received the packet + * @protocol: The packet protocol + */ +probe netdev.rx + = kernel.function("netif_rx") +{ + netdev = $skb->dev + dev_name = get_netdev_name(netdev) + protocol = $skb->protocol +} + +/** + * probe netdev.change_rx_flag - Called when the device RX flag will be changed + * @dev_name: The device that will be changed + * @flags: The new flags + */ +probe netdev.change_rx_flag + = kernel.function("dev_change_rx_flags") +{ + dev_name = get_netdev_name($dev) + flags = $flags +} + +/** + * probe netdev.set_promiscuity - Called when the device enters/leaves promiscuity + * @dev_name: The device that is entering/leaving promiscuity mode + * @enable: If the device is entering promiscuity mode + * @disable: If the device is leaving promiscuity mode + * @inc: Count the number of promiscuity openers + */ +probe netdev.set_promiscuity + = kernel.function("dev_set_promiscuity") +{ + dev_name = get_netdev_name($dev) + if ($inc){ + enable = 1 + } else { + disable = 1 + } + inc = $inc +} + +/** + * probe netdev.ioctl - Called when the device suffers an IOCTL + * @cmd: The IOCTL request + * @arg: The IOCTL argument (usually the netdev interface) + */ +probe netdev.ioctl + = kernel.function("dev_ioctl") +{ + cmd = $cmd + arg = user_string($arg) +} + +/** + * probe netdev.register - Called when the device is registered + * @dev_name: The device that is going to be registered + */ +probe netdev.register + = kernel.function("register_netdevice"), + kernel.function("register_netdev") +{ + dev_name = get_netdev_name($dev) +} + +/** + * probe netdev.unregister - Called when the device is being unregistered + * @dev_name: The device that is going to be unregistered + */ +probe netdev.unregister + = kernel.function("unregister_netdev") +{ + dev_name = get_netdev_name($dev) +} + +/** + * probe netdev.get_stats - Called when someone asks the device statistics + * @dev_name: The device that is going to provide the statistics + */ +probe netdev.get_stats + = kernel.function("dev_get_stats") +{ + dev_name = get_netdev_name($dev) +} + +/** + * probe netdev.change_mac - Called when the netdev_name has the MAC changed + * @dev_name: The device that will have the MTU changed + * @mac_len: The MAC length + * @old_mac: The current MAC address + * @new_mac: The new MAC address + */ +probe netdev.change_mac + = kernel.function("dev_set_mac_address") +{ + dev_name = get_netdev_name($dev) + mac_len = $dev->addr_len + + // Old MAC Address + zero = $dev->dev_addr[0] + one = $dev->dev_addr[1] + two = $dev->dev_addr[2] + three =$dev->dev_addr[3] + four = $dev->dev_addr[4] + five = $dev->dev_addr[5] + old_mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x", + zero, one, two, three, four, five) + + // New MAC Address + zero = $sa->sa_data[0] + one = $sa->sa_data[1] + two = $sa->sa_data[2] + three =$sa->sa_data[3] + four =$sa->sa_data[4] + five = $sa->sa_data[5] + new_mac = sprintf("%02x:%02x:%02x:%02x:%02x:%02x", + zero, one, two, three, four, five) +} |