LinuxTraceToolkit ChangeLog
LinuxTraceToolkit ChangeLog
+15/02/2006 LTTV 0.8.21
+ Add support for data with network byte order.
15/02/2006 LTTV 0.8.20
Fix end of trace NULL pointer problem in debug output of
lttvwindow.
15/02/2006 LTTV 0.8.20
Fix end of trace NULL pointer problem in debug output of
lttvwindow.
AC_PREREQ(2.57)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
#AC_WITH_LTDL # not needed ?
AC_PREREQ(2.57)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
#AC_WITH_LTDL # not needed ?
-AM_INIT_AUTOMAKE(LinuxTraceToolkitViewer,0.8.20-15022006)
+AM_INIT_AUTOMAKE(LinuxTraceToolkitViewer,0.8.21-22022006)
AM_CONFIG_HEADER(config.h)
AM_PROG_LIBTOOL
AM_CONFIG_HEADER(config.h)
AM_PROG_LIBTOOL
<event name=packet_in>
<description>A packet is arriving</description>
<event name=packet_in>
<description>A packet is arriving</description>
- <field name="skbuff"> <description>Socket buffer pointer : identify the socket buffer</description> <pointer/> </field>
+ <field name="skbuff"> <description>Socket buffer pointer : identify the
+ socket buffer</description> <pointer/> </field>
<field name="protocol"> <description>Protocol of the packet</description> <uint size=2/> </field>
</event>
<field name="protocol"> <description>Protocol of the packet</description> <uint size=2/> </field>
</event>
****************************************************************************/
guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f)
{
****************************************************************************/
guint32 ltt_event_get_unsigned(LttEvent *e, LttField *f)
{
- gboolean reverse_byte_order = LTT_GET_BO(e->tracefile);
-
+ gboolean reverse_byte_order;
+ if(unlikely(f->field_type.network)) {
+ reverse_byte_order = (g_ntohs(0x1) != 0x1);
+ } else {
+ reverse_byte_order = LTT_GET_BO(e->tracefile);
+ }
+
switch(f->field_size) {
case 1:
{
switch(f->field_size) {
case 1:
{
gint32 ltt_event_get_int(LttEvent *e, LttField *f)
{
gint32 ltt_event_get_int(LttEvent *e, LttField *f)
{
- gboolean reverse_byte_order = LTT_GET_BO(e->tracefile);
-
+ gboolean reverse_byte_order;
+ if(unlikely(f->field_type.network)) {
+ reverse_byte_order = (g_ntohs(0x1) != 0x1);
+ } else {
+ reverse_byte_order = LTT_GET_BO(e->tracefile);
+ }
+
switch(f->field_size) {
case 1:
{
switch(f->field_size) {
case 1:
{
guint64 ltt_event_get_long_unsigned(LttEvent *e, LttField *f)
{
guint64 ltt_event_get_long_unsigned(LttEvent *e, LttField *f)
{
- gboolean reverse_byte_order = LTT_GET_BO(e->tracefile);
+ gboolean reverse_byte_order;
+ if(unlikely(f->field_type.network)) {
+ reverse_byte_order = (g_ntohs(0x1) != 0x1);
+ } else {
+ reverse_byte_order = LTT_GET_BO(e->tracefile);
+ }
switch(f->field_size) {
case 1:
switch(f->field_size) {
case 1:
gint64 ltt_event_get_long_int(LttEvent *e, LttField *f)
{
gint64 ltt_event_get_long_int(LttEvent *e, LttField *f)
{
- gboolean reverse_byte_order = LTT_GET_BO(e->tracefile);
+ gboolean reverse_byte_order;
+ if(unlikely(f->field_type.network)) {
+ reverse_byte_order = (g_ntohs(0x1) != 0x1);
+ } else {
+ reverse_byte_order = LTT_GET_BO(e->tracefile);
+ }
switch(f->field_size) {
case 1:
switch(f->field_size) {
case 1:
float ltt_event_get_float(LttEvent *e, LttField *f)
{
float ltt_event_get_float(LttEvent *e, LttField *f)
{
- g_assert(LTT_HAS_FLOAT(e->tracefile));
- gboolean reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile);
+ gboolean reverse_byte_order;
+ if(unlikely(f->field_type.network)) {
+ reverse_byte_order = (g_ntohs(0x1) != 0x1);
+ } else {
+ g_assert(LTT_HAS_FLOAT(e->tracefile));
+ reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile);
+ }
g_assert(f->field_type.type_class == LTT_FLOAT && f->field_size == 4);
g_assert(f->field_type.type_class == LTT_FLOAT && f->field_size == 4);
double ltt_event_get_double(LttEvent *e, LttField *f)
{
double ltt_event_get_double(LttEvent *e, LttField *f)
{
- g_assert(LTT_HAS_FLOAT(e->tracefile));
- gboolean reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile);
+ gboolean reverse_byte_order;
+ if(unlikely(f->field_type.network)) {
+ reverse_byte_order = (g_ntohs(0x1) != 0x1);
+ } else {
+ g_assert(LTT_HAS_FLOAT(e->tracefile));
+ reverse_byte_order = LTT_GET_FLOAT_BO(e->tracefile);
+ }
if(f->field_size == 4)
return ltt_event_get_float(e, f);
if(f->field_size == 4)
return ltt_event_get_float(e, f);
type->enum_map = NULL;
type->fields = NULL;
type->fields_by_name = NULL;
type->enum_map = NULL;
type->fields = NULL;
type->fields_by_name = NULL;
+ type->network = td->network;
switch(td->type) {
case INT_FIXED:
switch(td->type) {
case INT_FIXED:
GHashTable *enum_map; //maps enum labels to numbers.
GArray *fields; // Array of LttFields, for array, sequence, union, struct.
GData *fields_by_name;
GHashTable *enum_map; //maps enum labels to numbers.
GArray *fields; // Array of LttFields, for array, sequence, union, struct.
GData *fields_by_name;
+ guint network; // Is the type in network byte order ?
t->fmt = NULL;
t->size = 0;
t->custom_write = 0;
t->fmt = NULL;
t->size = 0;
t->custom_write = 0;
while(1) {
token = getToken(in);
while(1) {
token = getToken(in);
t->size = getSize(in);
} else if(!strcmp("custom_write", token)) {
t->custom_write = 1;
t->size = getSize(in);
} else if(!strcmp("custom_write", token)) {
t->custom_write = 1;
+ } else if(!strcmp("network", token)) {
+ t->network = 1;
+ }
else if(car == '\"') f->name = allocAndCopy(getQuotedString(in));
else f->name = allocAndCopy(getName(in));
}
else if(car == '\"') f->name = allocAndCopy(getQuotedString(in));
else f->name = allocAndCopy(getName(in));
}
}
char *getNameAttribute(parse_file_t *in)
}
char *getNameAttribute(parse_file_t *in)
sequence_t labels_description;
int already_printed;
sequence_t fields; // for structure, array and sequence (field_t type)
sequence_t labels_description;
int already_printed;
sequence_t fields; // for structure, array and sequence (field_t type)
- int custom_write; /* Should we use a custom write function ? */
+ int custom_write; /* Should we use a custom write function ? */
+ int network; /* Is the type a in network byte order ? */
different = 1;
goto end;
}
different = 1;
goto end;
}
+ if(type1->network != type2->network) {
+ different = 1;
+ goto end;
+ }
switch(type1->type_class) {
case LTT_INT_FIXED:
switch(type1->type_class) {
case LTT_INT_FIXED:
- lttv_attribute_find(self->parent.a, LTTV_STATE_HOOKS, LTTV_POINTER, &val);
+ lttv_attribute_find(ts->parent.a, LTTV_STATE_HOOKS, LTTV_POINTER, &val);
*(val.v_pointer) = hooks;
}
}
*(val.v_pointer) = hooks;
}
}
nb_trace = lttv_traceset_number(traceset);
for(i = 0 ; i < nb_trace ; i++) {
ts = LTTV_TRACE_STATE(self->parent.traces[i]);
nb_trace = lttv_traceset_number(traceset);
for(i = 0 ; i < nb_trace ; i++) {
ts = LTTV_TRACE_STATE(self->parent.traces[i]);
- lttv_attribute_find(self->parent.a, LTTV_STATE_HOOKS, LTTV_POINTER, &val);
+ lttv_attribute_find(ts->parent.a, LTTV_STATE_HOOKS, LTTV_POINTER, &val);
hooks = *(val.v_pointer);
/* Remove these hooks from each event_by_id hooks list */
hooks = *(val.v_pointer);
/* Remove these hooks from each event_by_id hooks list */