[dtrace-discuss] Help required on invalid alignment - dtrace !

Lenin Lakshminarayanan -X (lelakshm - HCL at Cisco)
Wed, 13 Jun 2007 16:18:33 -0000

Hello,

Can someone please help me understand what''s wrong here ?

Basically from a streams module, i am creating a new v6 packet and
pushing it to the driver. I don''t see any of those v6 packets going out
of the sol box. I suspect that it''s being dropped by the driver. To
clarify this understanding, i did a dtrace and i am unable to interpret
the output :

Here''s my dtrace script :
#include <sys/types.h>
#include <sys/ethernet.h>

bge_send:entry
{
        self->mp = (mblk_t *)args[1];
        self->ether = (struct ether_header*)self->mp->b_rptr;
        self->daddr = self->ether->ether_dhost;
        self->saddr = self->ether->ether_shost;
        self->dest = self->daddr;
        self->src = self->saddr;
        self->type = (self->ether->ether_type &
0xf0)|(self->ether->ether_type & 0xf);
        printf(":\n");
        printf("Sent Packet\n");
        printf("Ethernet Header\n");
        printf("  Destination: ");
        printf("%x:", (char)self->dest.ether_addr_octet[0]);
        printf("%x:", (char)self->dest.ether_addr_octet[1]);
        printf("%x:", (char)self->dest.ether_addr_octet[2]);
        printf("%x:", (char)self->dest.ether_addr_octet[3]);
        printf("%x:", (char)self->dest.ether_addr_octet[4]);
        printf("%x", (char)self->dest.ether_addr_octet[5]);
        printf("\n  Source: ");
        printf("%x:", (char)self->src.ether_addr_octet[0]);
        printf("%x:", (char)self->src.ether_addr_octet[1]);
        printf("%x:", (char)self->src.ether_addr_octet[2]);
        printf("%x:", (char)self->src.ether_addr_octet[3]);
        printf("%x:", (char)self->src.ether_addr_octet[4]);
        printf("%x", (char)self->src.ether_addr_octet[5]);
        printf("\n  Type: ");
        printf("%x\n", (self->ether->ether_type));
        printf("%x\n", (self->type));
}

bge_send:entry
/self->type != 0x0/
{
        self->iphdr = (ipha_t *)((char *)self->mp->b_rptr+sizeof(struct
ether_header));
        printf("IP Header\n");
        printf("  version and header length = %x\n",
self->iphdr->ipha_version_and_hdr_length);
        printf("  TOS = %x\n",
self->iphdr->ipha_type_of_service);
        printf("  length = %x%x\n",
(self->iphdr->ipha_length&0xff),
((self->iphdr->ipha_length&0xff00)>>8));
        printf("  ident = %x%x\n",
(self->iphdr->ipha_ident&0xff),
((self->iphdr->ipha_ident&0xff00)>>8));
        printf("  fragment offset = %x\n",
((self->iphdr->ipha_fragment_offset_and_flags&0xfff1)>>3));
        printf("  IP flags = %x\n",
(self->iphdr->ipha_fragment_offset_and_flags&0x7));
        printf("  ttl = %x\n", self->iphdr->ipha_ttl);
        printf("  protocol = %x\n",
(char)self->iphdr->ipha_protocol);
        self->protocol = self->iphdr->ipha_protocol;
        printf("  header checksum = %x%x\n",
(self->iphdr->ipha_hdr_checksum&0xff),
((self->iphdr->ipha_hdr_checksum&0xff00)>>8));
        printf("   Source IP Addr = %d",
(self->iphdr->ipha_src&0xff));
        printf(".%d",
((self->iphdr->ipha_src&0xff00)>>8));
        printf(".%d",
((self->iphdr->ipha_src&0xff0000)>>16));
        printf(".%d\n",
((self->iphdr->ipha_src&0xff000000)>>24));
        printf("   Destination IP Addr = %d",
(self->iphdr->ipha_dst&0xff));
        printf(".%d",
((self->iphdr->ipha_dst&0xff00)>>8));
        printf(".%d",
((self->iphdr->ipha_dst&0xff0000)>>16));
        printf(".%d\n",
((self->iphdr->ipha_dst&0xff000000)>>24));
}

bge_send:return
{
}

For every v6 packet that is sent from the sol box, i get the following
error from the dtrace and as a result, i don''t see the IP header
printed
for the v6 packets at all ?

dtrace: error on enabled probe ID 2 (ID 43020: fbt:bge:bge_send:entry):
invalid alignment (0x600178ffc0a) in action #16 at DIF offset 12
dtrace: error on enabled probe ID 2 (ID 43020: fbt:bge:bge_send:entry):
invalid alignment (0x600178ffc0a) in action #16 at DIF offset 12
dtrace: error on enabled probe ID 2 (ID 43020: fbt:bge:bge_send:entry):
invalid alignment (0x600178ffa0a) in action #16 at DIF offset 12


Can someone please clarify what''s wrong ? Does this mean that the
mblk_t
coming to the bge driver is malformed ? I see the IP Header properly
printed for the v4 packets. I see the above errors only for those v6
packets that i create and inject. Am really stuck. Someone please
clarify.

Thanks,
Lenin
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.opensolaris.org/pipermail/dtrace-discuss/attachments/20070613/45ae1890/attachment.html>