LTTng : Linux Trace Toolkit Next Generation 0.5.95, kernel 2.6.17
Subsystems (2)
PATCH 7/16 LTTng : Linux Trace Toolkit Next Generation 0.5.95, kernel 2.6.17
7- LTTng helper modules
ltt-control : Netlink interface to control tracing from user space. ltt-statedump : Module reponsible for grabbing information thorough the kernel when the trace starts.
patch-2.6.17-lttng-0.5.95-modules.diff
OpenPGP public key: http://krystal.dyndns.org:8080/key/compudj.gpg Key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
ltt/ltt-control.c new file +119 -0
@@ -0,0 +1,119 @@ +/* ltt-control.c +* +* LTT control module over a netlink socket. +* +* Inspired from Relay Apps, by Tom Zanussi and iptables +* +* Copyright 2005 - +* Mathieu Desnoyers <[email protected]> +*/ + +#include <linux/init.h> +#include <linux/module.h> +#include <linux/ltt-core.h> +#include <linux/netlink.h> +#include <linux/inet.h> +#include <linux/ip.h> +#include <linux/security.h> +#include <linux/skbuff.h> +#include <linux/types.h> +#include <net/sock.h> +#include "ltt-control.h" + +#define LTTCTLM_BASE 0x10 +#define LTTCTLM_CONTROL (LTTCTLM_BASE + 1)/* LTT control message */ + +static struct sock *socket; + +void ltt_control_input (struct sock *sk,int len) +{ +struct sk_buff *skb; +struct nlmsghdr *nlh =NULL ; +u8 *payload =NULL ; +lttctl_peer_msg_t *msg; +int err; + +printk (KERN_DEBUG "ltt-control ltt_control_input\n" ); + +while ((skb =skb_dequeue (&sk->sk_receive_queue)) !=NULL ) { + + nlh = (struct nlmsghdr *)skb->data; +if (security_netlink_recv (skb)) { +netlink_ack (skb, nlh,EPERM ); +kfree_skb (skb); +continue ; + } +/* process netlink message pointed by skb->data */ + err =EINVAL ; + payload =NLMSG_DATA (nlh); +/* process netlink message with header pointed by +* nlh and payload pointed by payload +*/ +if (nlh->nlmsg_len != +sizeof (lttctl_peer_msg_t) + +sizeof (struct nlmsghdr )) { +printk (KERN_ALERT "ltt-control bad message length %d vs. %d\n" , + nlh->nlmsg_len,sizeof (lttctl_peer_msg_t) + +sizeof (struct nlmsghdr )); +netlink_ack (skb, nlh,EINVAL ); +kfree_skb (skb); +continue ; + } + msg = (lttctl_peer_msg_t *)payload; + +switch (msg->op) { +case OP_CREATE : + err =ltt_control (LTT_CONTROL_CREATE_TRACE , + msg->trace_name, + msg->trace_type, msg->args); +break ; +case OP_DESTROY : + err =ltt_control (LTT_CONTROL_DESTROY_TRACE , + msg->trace_name, + msg->trace_type, msg->args); +break ; +case OP_START : + err =ltt_control (LTT_CONTROL_START , + msg->trace_name, + msg->trace_type, msg->args); +break ; +case OP_STOP : + err =ltt_control (LTT_CONTROL_STOP , + msg->trace_name, + msg->trace_type, msg->args); +break ; +default : + err =EBADRQC ; +printk (KERN_INFO +"ltt-control invalid operation\n" ); + } +netlink_ack (skb, nlh, err); +kfree_skb (skb); + } +} + + +static int ltt_control_init (void ) +{ +printk (KERN_INFO "ltt-control init\n" ); + + socket =netlink_kernel_create (NETLINK_LTT ,1 , + ltt_control_input,THIS_MODULE ); +if (socket ==NULL )return -EPERM ; +else return 0 ; +} + +static void ltt_control_exit (void ) +{ +printk (KERN_INFO "ltt-control exit\n" ); +sock_release (socket->sk_socket); +} + + +module_init(ltt_control_init) +module_exit(ltt_control_exit) + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Mathieu Desnoyers"); +MODULE_DESCRIPTION("Linux Trace Toolkit Controller"); +
ltt/ltt-control.h new file +31 -0
@@ -0,0 +1,31 @@ +/* ltt-control.h +* +* LTT control module over a netlink socket. +* +* Inspired from Relay Apps, by Tom Zanussi and iptables +* +* Copyright 2005 - +* Mathieu Desnoyers <[email protected]> +*/ + +#ifndef _LTT_CONTROL_H +#define _LTT_CONTROL_H + +enum trace_op { +OP_CREATE , +OP_DESTROY , +OP_START , +OP_STOP , +OP_ALIGN , +OP_NONE +}; + +typedef struct lttctl_peer_msg { +char trace_name[NAME_MAX ]; +char trace_type[NAME_MAX ]; +enum trace_op op; +union ltt_control_args args; +}lttctl_peer_msg_t ; + +#endif //_LTT_CONTROL_H +
ltt/ltt-statedump.c new file +327 -0
327 lines not on this page · raw message
mm/filemap.c +0 -0