Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-21 Thread Krish
Hey Flavio

I am so sorry for the inconvenience caused.
Next time I will take care of it. You have been a great help for me.
I thank you from the bottom of my heart. I was stuck on this part since
last few days.
Now, it has been resolved.

Thanks
Krish

On Wed, Feb 20, 2019 at 8:25 PM Flavio Leitner  wrote:

> On Tue, Feb 19, 2019 at 12:43:08PM +0800, Krish wrote:
> > Hi Flavio,
> >
> > I think I got tcp_src and tcp_dst values, I can also successfully print
> > them.
> > Here is what I did:
> > for(numb=0;numb > {
> >
> > uint8_t nw_proto = 0;
> > packet=packets->packets[numb];
> > size_t size = dp_packet_size(packet);
> > const void *data = dp_packet_data(packet);
> > const char *frame = (const char *)data;
> > dp_packet_reset_offsets(packet);
> > *data_pull(, , ETH_ADDR_LEN * 2);*
> > //dl_type = parse_ether(, );
> > //VLOG_DBG("parse ether type DL TYPE: 0x%4x", dl_type);
> > packet->l3_ofs = (char *)data - frame;
> > const struct ip_header *ip = dp_packet_l3(packet);
> > nw_proto = ip->ip_proto;
> > VLOG_DBG("IP proto---> %d ", nw_proto);
> > int ip_len;
> > ip_len = IP_IHL(ip->ip_ihl_ver) * 4;
> >
> > *data_pull(, , ip_len);*
> > packet->l4_ofs = (char *)data - frame;
> > if(nw_proto == 6)
> > {
> > struct tcp_header *th = dp_packet_l4(packet);
> > VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src));
> > VLOG_DBG( "tcp_dst ---> %d", ntohs(th->tcp_dst));
> >   }
> > }
> >
> >
> > Can you please confirm, if this is the right approach I have used and not
> > seeing the old values like before?
>
> It's hard to read code using html (bold, etc), could you please use
> text only and indent the code properly? It makes our life a lot easier.
>
> When you pull ETH_ADDR_LEN*2, the offset now points to ethernet_type
> which is not the l3_ofs as you set next. I don't think the above code
> works unless you uncomment parse_ethertype() which pulls more 4 bytes.
>
> fbl
>
>
>
> >
> > Thank you so much,
> > Krish
> >
> > On Tue, Feb 19, 2019 at 11:25 AM Krish  wrote:
> >
> > > Flavio,
> > >
> > > Thank you for the clarification. You explained it very well.
> > >
> > > I don't want to wait for the miniflow_extraction, so I am left with
> > > parsing packet myself.
> > >
> > > Here is what I am doing now:
> > >
> > > for(numb=0;numb > > {
> > >
> > > uint8_t nw_proto;
> > > const char *frame;
> > > packet=packets->packets[numb];
> > > const void *data = dp_packet_data(packet);
> > > frame = data;
> > > *dp_packet_reset_offsets(packet);*
> > > * packet->l3_ofs = (char *)data - frame;*
> > > * const struct ip_header *ip = dp_packet_l3(packet);*
> > > nw_proto = ip->ip_proto;
> > > VLOG_DBG("IP proto---> %d ", nw_proto); // This is 0
> > >
> > > }
> > >
> > > I followed almost the same approach of what is going in
> miniflow_extract.
> > > nw_proto(ip protocol) is printing out to be 0.
> > > I am using this code just before emc_processing and inside
> > > dp_netdev_input__.
> > > Can you please help me here?
> > >
> > > Thanks
> > > Krish
> > >
> > >
> > > On Mon, Feb 18, 2019 at 8:11 PM Flavio Leitner 
> wrote:
> > >
> > >> On Mon, Feb 18, 2019 at 11:05:53AM +0800, Krish wrote:
> > >> > Thanks for reply Ben.
> > >> > Does it mean that *miniflow_extract* will also initialize the L3
> header
> > >> > pointer?
> > >>
> > >> If you look at the miniflow_extract(), you  will see that it calls
> > >> dp_packet_reset_offsets(packet) which will set all the header pointers
> > >> to their defaults meaning that they are not pointing to anything real.
> > >>
> > >> These pointers are used by dp_packet_l3 (or 4) functions to locate
> > >> the header.
> > >>
> > >> Then if you continue following the function, you will notice that
> > >> the code parses the packet from the outer header to the inner header
> > >> and as the parser goes, it updates the header offsets, like this line:
> > >>
> > >> packet->l3_ofs = (char *)data - frame;
> > >>
> > >> At this point, you have the pointer to the l3 header and you could use
> > >> dp_packet_l3().
> > >>
> > >>
> > >> > But I am getting the correct values for *nw_proto* from the L3
> header.
> > >> > struct ip_header *ip = dp_packet_l3(packet);
> > >> > nw_proto = ip->ip_proto;
> > >> >
> > >> > Any comments on this? Whether its right or wrong?
> > >>
> > >> When using DPDK, the packet is represented by two parts. One if the
> > >> rte buffer (packet data) that comes from DPDK library and the second
> > >> part is the packet's metadata (the offsets you need). This offsets
> > >> are allocated in the stack at dp_netdev_process_rxq_port(), so most
> > >> probably you are seeing old values from previous packets which
> > >> happens to work, but they are not correct.
> > >>
> > >> As I said above miniflow_extract() initializes those offsets to a
> > >> known state and then parse the packet to update with the correct
> > >> values.
> > >>
> > >> In summary, you will need to either wait for miniflow_extract() or
> > >> parse the packet yourself 

Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-20 Thread Flavio Leitner
On Tue, Feb 19, 2019 at 12:43:08PM +0800, Krish wrote:
> Hi Flavio,
> 
> I think I got tcp_src and tcp_dst values, I can also successfully print
> them.
> Here is what I did:
> for(numb=0;numb {
> 
> uint8_t nw_proto = 0;
> packet=packets->packets[numb];
> size_t size = dp_packet_size(packet);
> const void *data = dp_packet_data(packet);
> const char *frame = (const char *)data;
> dp_packet_reset_offsets(packet);
> *data_pull(, , ETH_ADDR_LEN * 2);*
> //dl_type = parse_ether(, );
> //VLOG_DBG("parse ether type DL TYPE: 0x%4x", dl_type);
> packet->l3_ofs = (char *)data - frame;
> const struct ip_header *ip = dp_packet_l3(packet);
> nw_proto = ip->ip_proto;
> VLOG_DBG("IP proto---> %d ", nw_proto);
> int ip_len;
> ip_len = IP_IHL(ip->ip_ihl_ver) * 4;
> 
> *data_pull(, , ip_len);*
> packet->l4_ofs = (char *)data - frame;
> if(nw_proto == 6)
> {
> struct tcp_header *th = dp_packet_l4(packet);
> VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src));
> VLOG_DBG( "tcp_dst ---> %d", ntohs(th->tcp_dst));
>   }
> }
> 
> 
> Can you please confirm, if this is the right approach I have used and not
> seeing the old values like before?

It's hard to read code using html (bold, etc), could you please use
text only and indent the code properly? It makes our life a lot easier.

When you pull ETH_ADDR_LEN*2, the offset now points to ethernet_type
which is not the l3_ofs as you set next. I don't think the above code
works unless you uncomment parse_ethertype() which pulls more 4 bytes.

fbl



> 
> Thank you so much,
> Krish
> 
> On Tue, Feb 19, 2019 at 11:25 AM Krish  wrote:
> 
> > Flavio,
> >
> > Thank you for the clarification. You explained it very well.
> >
> > I don't want to wait for the miniflow_extraction, so I am left with
> > parsing packet myself.
> >
> > Here is what I am doing now:
> >
> > for(numb=0;numb > {
> >
> > uint8_t nw_proto;
> > const char *frame;
> > packet=packets->packets[numb];
> > const void *data = dp_packet_data(packet);
> > frame = data;
> > *dp_packet_reset_offsets(packet);*
> > * packet->l3_ofs = (char *)data - frame;*
> > * const struct ip_header *ip = dp_packet_l3(packet);*
> > nw_proto = ip->ip_proto;
> > VLOG_DBG("IP proto---> %d ", nw_proto); // This is 0
> >
> > }
> >
> > I followed almost the same approach of what is going in miniflow_extract.
> > nw_proto(ip protocol) is printing out to be 0.
> > I am using this code just before emc_processing and inside
> > dp_netdev_input__.
> > Can you please help me here?
> >
> > Thanks
> > Krish
> >
> >
> > On Mon, Feb 18, 2019 at 8:11 PM Flavio Leitner  wrote:
> >
> >> On Mon, Feb 18, 2019 at 11:05:53AM +0800, Krish wrote:
> >> > Thanks for reply Ben.
> >> > Does it mean that *miniflow_extract* will also initialize the L3 header
> >> > pointer?
> >>
> >> If you look at the miniflow_extract(), you  will see that it calls
> >> dp_packet_reset_offsets(packet) which will set all the header pointers
> >> to their defaults meaning that they are not pointing to anything real.
> >>
> >> These pointers are used by dp_packet_l3 (or 4) functions to locate
> >> the header.
> >>
> >> Then if you continue following the function, you will notice that
> >> the code parses the packet from the outer header to the inner header
> >> and as the parser goes, it updates the header offsets, like this line:
> >>
> >> packet->l3_ofs = (char *)data - frame;
> >>
> >> At this point, you have the pointer to the l3 header and you could use
> >> dp_packet_l3().
> >>
> >>
> >> > But I am getting the correct values for *nw_proto* from the L3 header.
> >> > struct ip_header *ip = dp_packet_l3(packet);
> >> > nw_proto = ip->ip_proto;
> >> >
> >> > Any comments on this? Whether its right or wrong?
> >>
> >> When using DPDK, the packet is represented by two parts. One if the
> >> rte buffer (packet data) that comes from DPDK library and the second
> >> part is the packet's metadata (the offsets you need). This offsets
> >> are allocated in the stack at dp_netdev_process_rxq_port(), so most
> >> probably you are seeing old values from previous packets which
> >> happens to work, but they are not correct.
> >>
> >> As I said above miniflow_extract() initializes those offsets to a
> >> known state and then parse the packet to update with the correct
> >> values.
> >>
> >> In summary, you will need to either wait for miniflow_extract() or
> >> parse the packet yourself if you need the tcp port.
> >>
> >> HTH,
> >> fbl
> >>
> >>
> >>
> >> >
> >> > Thanks a lot for your patience and response.
> >> >
> >> > Regards
> >> >
> >> > Krish
> >> >
> >> > On Sat, Feb 16, 2019 at 10:09 AM Ben Pfaff  wrote:
> >> >
> >> > > You are almost certainly dereferencing a null pointer.
> >> > >
> >> > > On Sat, Feb 16, 2019 at 09:02:17AM +0800, Krish wrote:
> >> > > > That code I showed before. It is working fine and crashing only
> >> when I
> >> > > > enable debugging.
> >> > > >
> >> > > > As *sruct tcp_header's tcp_src* has ovs_be16 type. How to 

Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-18 Thread Krish
Hi Flavio,

I think I got tcp_src and tcp_dst values, I can also successfully print
them.
Here is what I did:
for(numb=0;numbpackets[numb];
size_t size = dp_packet_size(packet);
const void *data = dp_packet_data(packet);
const char *frame = (const char *)data;
dp_packet_reset_offsets(packet);
*data_pull(, , ETH_ADDR_LEN * 2);*
//dl_type = parse_ether(, );
//VLOG_DBG("parse ether type DL TYPE: 0x%4x", dl_type);
packet->l3_ofs = (char *)data - frame;
const struct ip_header *ip = dp_packet_l3(packet);
nw_proto = ip->ip_proto;
VLOG_DBG("IP proto---> %d ", nw_proto);
int ip_len;
ip_len = IP_IHL(ip->ip_ihl_ver) * 4;

*data_pull(, , ip_len);*
packet->l4_ofs = (char *)data - frame;
if(nw_proto == 6)
{
struct tcp_header *th = dp_packet_l4(packet);
VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src));
VLOG_DBG( "tcp_dst ---> %d", ntohs(th->tcp_dst));
  }
}


Can you please confirm, if this is the right approach I have used and not
seeing the old values like before?

Thank you so much,
Krish

On Tue, Feb 19, 2019 at 11:25 AM Krish  wrote:

> Flavio,
>
> Thank you for the clarification. You explained it very well.
>
> I don't want to wait for the miniflow_extraction, so I am left with
> parsing packet myself.
>
> Here is what I am doing now:
>
> for(numb=0;numb {
>
> uint8_t nw_proto;
> const char *frame;
> packet=packets->packets[numb];
> const void *data = dp_packet_data(packet);
> frame = data;
> *dp_packet_reset_offsets(packet);*
> * packet->l3_ofs = (char *)data - frame;*
> * const struct ip_header *ip = dp_packet_l3(packet);*
> nw_proto = ip->ip_proto;
> VLOG_DBG("IP proto---> %d ", nw_proto); // This is 0
>
> }
>
> I followed almost the same approach of what is going in miniflow_extract.
> nw_proto(ip protocol) is printing out to be 0.
> I am using this code just before emc_processing and inside
> dp_netdev_input__.
> Can you please help me here?
>
> Thanks
> Krish
>
>
> On Mon, Feb 18, 2019 at 8:11 PM Flavio Leitner  wrote:
>
>> On Mon, Feb 18, 2019 at 11:05:53AM +0800, Krish wrote:
>> > Thanks for reply Ben.
>> > Does it mean that *miniflow_extract* will also initialize the L3 header
>> > pointer?
>>
>> If you look at the miniflow_extract(), you  will see that it calls
>> dp_packet_reset_offsets(packet) which will set all the header pointers
>> to their defaults meaning that they are not pointing to anything real.
>>
>> These pointers are used by dp_packet_l3 (or 4) functions to locate
>> the header.
>>
>> Then if you continue following the function, you will notice that
>> the code parses the packet from the outer header to the inner header
>> and as the parser goes, it updates the header offsets, like this line:
>>
>> packet->l3_ofs = (char *)data - frame;
>>
>> At this point, you have the pointer to the l3 header and you could use
>> dp_packet_l3().
>>
>>
>> > But I am getting the correct values for *nw_proto* from the L3 header.
>> > struct ip_header *ip = dp_packet_l3(packet);
>> > nw_proto = ip->ip_proto;
>> >
>> > Any comments on this? Whether its right or wrong?
>>
>> When using DPDK, the packet is represented by two parts. One if the
>> rte buffer (packet data) that comes from DPDK library and the second
>> part is the packet's metadata (the offsets you need). This offsets
>> are allocated in the stack at dp_netdev_process_rxq_port(), so most
>> probably you are seeing old values from previous packets which
>> happens to work, but they are not correct.
>>
>> As I said above miniflow_extract() initializes those offsets to a
>> known state and then parse the packet to update with the correct
>> values.
>>
>> In summary, you will need to either wait for miniflow_extract() or
>> parse the packet yourself if you need the tcp port.
>>
>> HTH,
>> fbl
>>
>>
>>
>> >
>> > Thanks a lot for your patience and response.
>> >
>> > Regards
>> >
>> > Krish
>> >
>> > On Sat, Feb 16, 2019 at 10:09 AM Ben Pfaff  wrote:
>> >
>> > > You are almost certainly dereferencing a null pointer.
>> > >
>> > > On Sat, Feb 16, 2019 at 09:02:17AM +0800, Krish wrote:
>> > > > That code I showed before. It is working fine and crashing only
>> when I
>> > > > enable debugging.
>> > > >
>> > > > As *sruct tcp_header's tcp_src* has ovs_be16 type. How to store and
>> print
>> > > > this value ?
>> > > >
>> > > > Thanks
>> > > >
>> > > > On Sat, Feb 16, 2019, 08:43 Ben Pfaff  wrote:
>> > > >
>> > > > > Then you're going to have to work harder since miniflow_extract()
>> is
>> > > > > what initializes the L4 header pointer.
>> > > > >
>> > > > > On Sat, Feb 16, 2019 at 08:39:08AM +0800, Krish wrote:
>> > > > > > I am sorry, but I am trying not to use extracted flow.  I want
>> to use
>> > > > > this
>> > > > > > information before it goes to EMC.
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:
>> > > > > >
>> > > > > > > On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
>> > > > > > > > Hi
>> > > > > > > >
>> > > > > > > > I want to store 

Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-18 Thread Krish
Flavio,

Thank you for the clarification. You explained it very well.

I don't want to wait for the miniflow_extraction, so I am left with parsing
packet myself.

Here is what I am doing now:

for(numb=0;numbpackets[numb];
const void *data = dp_packet_data(packet);
frame = data;
*dp_packet_reset_offsets(packet);*
* packet->l3_ofs = (char *)data - frame;*
* const struct ip_header *ip = dp_packet_l3(packet);*
nw_proto = ip->ip_proto;
VLOG_DBG("IP proto---> %d ", nw_proto); // This is 0

}

I followed almost the same approach of what is going in miniflow_extract.
nw_proto(ip protocol) is printing out to be 0.
I am using this code just before emc_processing and inside
dp_netdev_input__.
Can you please help me here?

Thanks
Krish


On Mon, Feb 18, 2019 at 8:11 PM Flavio Leitner  wrote:

> On Mon, Feb 18, 2019 at 11:05:53AM +0800, Krish wrote:
> > Thanks for reply Ben.
> > Does it mean that *miniflow_extract* will also initialize the L3 header
> > pointer?
>
> If you look at the miniflow_extract(), you  will see that it calls
> dp_packet_reset_offsets(packet) which will set all the header pointers
> to their defaults meaning that they are not pointing to anything real.
>
> These pointers are used by dp_packet_l3 (or 4) functions to locate
> the header.
>
> Then if you continue following the function, you will notice that
> the code parses the packet from the outer header to the inner header
> and as the parser goes, it updates the header offsets, like this line:
>
> packet->l3_ofs = (char *)data - frame;
>
> At this point, you have the pointer to the l3 header and you could use
> dp_packet_l3().
>
>
> > But I am getting the correct values for *nw_proto* from the L3 header.
> > struct ip_header *ip = dp_packet_l3(packet);
> > nw_proto = ip->ip_proto;
> >
> > Any comments on this? Whether its right or wrong?
>
> When using DPDK, the packet is represented by two parts. One if the
> rte buffer (packet data) that comes from DPDK library and the second
> part is the packet's metadata (the offsets you need). This offsets
> are allocated in the stack at dp_netdev_process_rxq_port(), so most
> probably you are seeing old values from previous packets which
> happens to work, but they are not correct.
>
> As I said above miniflow_extract() initializes those offsets to a
> known state and then parse the packet to update with the correct
> values.
>
> In summary, you will need to either wait for miniflow_extract() or
> parse the packet yourself if you need the tcp port.
>
> HTH,
> fbl
>
>
>
> >
> > Thanks a lot for your patience and response.
> >
> > Regards
> >
> > Krish
> >
> > On Sat, Feb 16, 2019 at 10:09 AM Ben Pfaff  wrote:
> >
> > > You are almost certainly dereferencing a null pointer.
> > >
> > > On Sat, Feb 16, 2019 at 09:02:17AM +0800, Krish wrote:
> > > > That code I showed before. It is working fine and crashing only when
> I
> > > > enable debugging.
> > > >
> > > > As *sruct tcp_header's tcp_src* has ovs_be16 type. How to store and
> print
> > > > this value ?
> > > >
> > > > Thanks
> > > >
> > > > On Sat, Feb 16, 2019, 08:43 Ben Pfaff  wrote:
> > > >
> > > > > Then you're going to have to work harder since miniflow_extract()
> is
> > > > > what initializes the L4 header pointer.
> > > > >
> > > > > On Sat, Feb 16, 2019 at 08:39:08AM +0800, Krish wrote:
> > > > > > I am sorry, but I am trying not to use extracted flow.  I want
> to use
> > > > > this
> > > > > > information before it goes to EMC.
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:
> > > > > >
> > > > > > > On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> > > > > > > > Hi
> > > > > > > >
> > > > > > > > I want to store tcp_src, dst port in a variable.
> > > > > > > > This is what I am doing:
> > > > > > > > 1. Retrieve packet from dp_packet_batch one by one.
> > > > > > > > 2. Retrieving field values by extracting packets headers:
> > > > > > > >
> > > > > > > > struct ip_header *ip = dp_packet_l3(packet);
> > > > > > > > nw_proto = ip->ip_proto;
> > > > > > > > if(nw_proto == 6)
> > > > > > > > {
> > > > > > > > struct tcp_header *th = dp_packet_l4(packet);
> > > > > > > > // The following are the 2 different ways I am trying to
> print
> > > the
> > > > > > > tcp_src.
> > > > > > > > I have tried it 1 and 2 separately not at the same time.
> > > > > > > > //1 . Ovs crash at the below statement
> > > > > > > > uint16_t src = (uint16_t) ntohs(th->tcp_src);
> > > > > > > > VLOG_DBG( "tcp_src ---> %d", src );
> > > > > > > > //2. When I enable logging ovs crashes at
> this
> > > point
> > > > > > > > VLOG_DBG( "tcp_src ---> %d",
> ntohs(th->tcp_src)
> > > );
> > > > > > > >
> > > > > > > >
> > > > > > > >  }
> > > > > > > >
> > > > > > > > Can anyone please help how to store tcp_src port value in a
> > > variable
> > > > > and
> > > > > > > > print it in vlogs?
> > > > > > > > Statement 2 is working 

Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-18 Thread Flavio Leitner
On Mon, Feb 18, 2019 at 11:05:53AM +0800, Krish wrote:
> Thanks for reply Ben.
> Does it mean that *miniflow_extract* will also initialize the L3 header
> pointer?

If you look at the miniflow_extract(), you  will see that it calls
dp_packet_reset_offsets(packet) which will set all the header pointers
to their defaults meaning that they are not pointing to anything real.

These pointers are used by dp_packet_l3 (or 4) functions to locate
the header.

Then if you continue following the function, you will notice that
the code parses the packet from the outer header to the inner header
and as the parser goes, it updates the header offsets, like this line:

packet->l3_ofs = (char *)data - frame;

At this point, you have the pointer to the l3 header and you could use
dp_packet_l3().


> But I am getting the correct values for *nw_proto* from the L3 header.
> struct ip_header *ip = dp_packet_l3(packet);
> nw_proto = ip->ip_proto;
> 
> Any comments on this? Whether its right or wrong?

When using DPDK, the packet is represented by two parts. One if the
rte buffer (packet data) that comes from DPDK library and the second
part is the packet's metadata (the offsets you need). This offsets
are allocated in the stack at dp_netdev_process_rxq_port(), so most
probably you are seeing old values from previous packets which
happens to work, but they are not correct.

As I said above miniflow_extract() initializes those offsets to a
known state and then parse the packet to update with the correct
values.

In summary, you will need to either wait for miniflow_extract() or
parse the packet yourself if you need the tcp port.

HTH,
fbl



> 
> Thanks a lot for your patience and response.
> 
> Regards
> 
> Krish
> 
> On Sat, Feb 16, 2019 at 10:09 AM Ben Pfaff  wrote:
> 
> > You are almost certainly dereferencing a null pointer.
> >
> > On Sat, Feb 16, 2019 at 09:02:17AM +0800, Krish wrote:
> > > That code I showed before. It is working fine and crashing only when I
> > > enable debugging.
> > >
> > > As *sruct tcp_header's tcp_src* has ovs_be16 type. How to store and print
> > > this value ?
> > >
> > > Thanks
> > >
> > > On Sat, Feb 16, 2019, 08:43 Ben Pfaff  wrote:
> > >
> > > > Then you're going to have to work harder since miniflow_extract() is
> > > > what initializes the L4 header pointer.
> > > >
> > > > On Sat, Feb 16, 2019 at 08:39:08AM +0800, Krish wrote:
> > > > > I am sorry, but I am trying not to use extracted flow.  I want to use
> > > > this
> > > > > information before it goes to EMC.
> > > > >
> > > > >
> > > > >
> > > > > On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:
> > > > >
> > > > > > On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> > > > > > > Hi
> > > > > > >
> > > > > > > I want to store tcp_src, dst port in a variable.
> > > > > > > This is what I am doing:
> > > > > > > 1. Retrieve packet from dp_packet_batch one by one.
> > > > > > > 2. Retrieving field values by extracting packets headers:
> > > > > > >
> > > > > > > struct ip_header *ip = dp_packet_l3(packet);
> > > > > > > nw_proto = ip->ip_proto;
> > > > > > > if(nw_proto == 6)
> > > > > > > {
> > > > > > > struct tcp_header *th = dp_packet_l4(packet);
> > > > > > > // The following are the 2 different ways I am trying to print
> > the
> > > > > > tcp_src.
> > > > > > > I have tried it 1 and 2 separately not at the same time.
> > > > > > > //1 . Ovs crash at the below statement
> > > > > > > uint16_t src = (uint16_t) ntohs(th->tcp_src);
> > > > > > > VLOG_DBG( "tcp_src ---> %d", src );
> > > > > > > //2. When I enable logging ovs crashes at this
> > point
> > > > > > > VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src)
> > );
> > > > > > >
> > > > > > >
> > > > > > >  }
> > > > > > >
> > > > > > > Can anyone please help how to store tcp_src port value in a
> > variable
> > > > and
> > > > > > > print it in vlogs?
> > > > > > > Statement 2 is working fine if vlogs are disabled, but I want the
> > > > port
> > > > > > > value to be stored in a variable and then print.
> > > > > >
> > > > > > I'd just get it from the extracted flow instead of inventing new
> > code
> > > > to
> > > > > > extract it.
> > > > > >
> > > >
> >

> ___
> discuss mailing list
> disc...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-17 Thread Krish
Thanks for reply Ben.
Does it mean that *miniflow_extract* will also initialize the L3 header
pointer?
But I am getting the correct values for *nw_proto* from the L3 header.
struct ip_header *ip = dp_packet_l3(packet);
nw_proto = ip->ip_proto;

Any comments on this? Whether its right or wrong?

Thanks a lot for your patience and response.

Regards

Krish

On Sat, Feb 16, 2019 at 10:09 AM Ben Pfaff  wrote:

> You are almost certainly dereferencing a null pointer.
>
> On Sat, Feb 16, 2019 at 09:02:17AM +0800, Krish wrote:
> > That code I showed before. It is working fine and crashing only when I
> > enable debugging.
> >
> > As *sruct tcp_header's tcp_src* has ovs_be16 type. How to store and print
> > this value ?
> >
> > Thanks
> >
> > On Sat, Feb 16, 2019, 08:43 Ben Pfaff  wrote:
> >
> > > Then you're going to have to work harder since miniflow_extract() is
> > > what initializes the L4 header pointer.
> > >
> > > On Sat, Feb 16, 2019 at 08:39:08AM +0800, Krish wrote:
> > > > I am sorry, but I am trying not to use extracted flow.  I want to use
> > > this
> > > > information before it goes to EMC.
> > > >
> > > >
> > > >
> > > > On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:
> > > >
> > > > > On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> > > > > > Hi
> > > > > >
> > > > > > I want to store tcp_src, dst port in a variable.
> > > > > > This is what I am doing:
> > > > > > 1. Retrieve packet from dp_packet_batch one by one.
> > > > > > 2. Retrieving field values by extracting packets headers:
> > > > > >
> > > > > > struct ip_header *ip = dp_packet_l3(packet);
> > > > > > nw_proto = ip->ip_proto;
> > > > > > if(nw_proto == 6)
> > > > > > {
> > > > > > struct tcp_header *th = dp_packet_l4(packet);
> > > > > > // The following are the 2 different ways I am trying to print
> the
> > > > > tcp_src.
> > > > > > I have tried it 1 and 2 separately not at the same time.
> > > > > > //1 . Ovs crash at the below statement
> > > > > > uint16_t src = (uint16_t) ntohs(th->tcp_src);
> > > > > > VLOG_DBG( "tcp_src ---> %d", src );
> > > > > > //2. When I enable logging ovs crashes at this
> point
> > > > > > VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src)
> );
> > > > > >
> > > > > >
> > > > > >  }
> > > > > >
> > > > > > Can anyone please help how to store tcp_src port value in a
> variable
> > > and
> > > > > > print it in vlogs?
> > > > > > Statement 2 is working fine if vlogs are disabled, but I want the
> > > port
> > > > > > value to be stored in a variable and then print.
> > > > >
> > > > > I'd just get it from the extracted flow instead of inventing new
> code
> > > to
> > > > > extract it.
> > > > >
> > >
>
___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-15 Thread Ben Pfaff
You are almost certainly dereferencing a null pointer.

On Sat, Feb 16, 2019 at 09:02:17AM +0800, Krish wrote:
> That code I showed before. It is working fine and crashing only when I
> enable debugging.
> 
> As *sruct tcp_header's tcp_src* has ovs_be16 type. How to store and print
> this value ?
> 
> Thanks
> 
> On Sat, Feb 16, 2019, 08:43 Ben Pfaff  wrote:
> 
> > Then you're going to have to work harder since miniflow_extract() is
> > what initializes the L4 header pointer.
> >
> > On Sat, Feb 16, 2019 at 08:39:08AM +0800, Krish wrote:
> > > I am sorry, but I am trying not to use extracted flow.  I want to use
> > this
> > > information before it goes to EMC.
> > >
> > >
> > >
> > > On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:
> > >
> > > > On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> > > > > Hi
> > > > >
> > > > > I want to store tcp_src, dst port in a variable.
> > > > > This is what I am doing:
> > > > > 1. Retrieve packet from dp_packet_batch one by one.
> > > > > 2. Retrieving field values by extracting packets headers:
> > > > >
> > > > > struct ip_header *ip = dp_packet_l3(packet);
> > > > > nw_proto = ip->ip_proto;
> > > > > if(nw_proto == 6)
> > > > > {
> > > > > struct tcp_header *th = dp_packet_l4(packet);
> > > > > // The following are the 2 different ways I am trying to print the
> > > > tcp_src.
> > > > > I have tried it 1 and 2 separately not at the same time.
> > > > > //1 . Ovs crash at the below statement
> > > > > uint16_t src = (uint16_t) ntohs(th->tcp_src);
> > > > > VLOG_DBG( "tcp_src ---> %d", src );
> > > > > //2. When I enable logging ovs crashes at this point
> > > > > VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src) );
> > > > >
> > > > >
> > > > >  }
> > > > >
> > > > > Can anyone please help how to store tcp_src port value in a variable
> > and
> > > > > print it in vlogs?
> > > > > Statement 2 is working fine if vlogs are disabled, but I want the
> > port
> > > > > value to be stored in a variable and then print.
> > > >
> > > > I'd just get it from the extracted flow instead of inventing new code
> > to
> > > > extract it.
> > > >
> >
___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-15 Thread Ben Pfaff
Then you're going to have to work harder since miniflow_extract() is
what initializes the L4 header pointer.

On Sat, Feb 16, 2019 at 08:39:08AM +0800, Krish wrote:
> I am sorry, but I am trying not to use extracted flow.  I want to use this
> information before it goes to EMC.
> 
> 
> 
> On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:
> 
> > On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> > > Hi
> > >
> > > I want to store tcp_src, dst port in a variable.
> > > This is what I am doing:
> > > 1. Retrieve packet from dp_packet_batch one by one.
> > > 2. Retrieving field values by extracting packets headers:
> > >
> > > struct ip_header *ip = dp_packet_l3(packet);
> > > nw_proto = ip->ip_proto;
> > > if(nw_proto == 6)
> > > {
> > > struct tcp_header *th = dp_packet_l4(packet);
> > > // The following are the 2 different ways I am trying to print the
> > tcp_src.
> > > I have tried it 1 and 2 separately not at the same time.
> > > //1 . Ovs crash at the below statement
> > > uint16_t src = (uint16_t) ntohs(th->tcp_src);
> > > VLOG_DBG( "tcp_src ---> %d", src );
> > > //2. When I enable logging ovs crashes at this point
> > > VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src) );
> > >
> > >
> > >  }
> > >
> > > Can anyone please help how to store tcp_src port value in a variable and
> > > print it in vlogs?
> > > Statement 2 is working fine if vlogs are disabled, but I want the port
> > > value to be stored in a variable and then print.
> >
> > I'd just get it from the extracted flow instead of inventing new code to
> > extract it.
> >
___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-15 Thread Krish
I am sorry, but I am trying not to use extracted flow.  I want to use this
information before it goes to EMC.



On Sat, Feb 16, 2019, 03:44 Ben Pfaff  wrote:

> On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> > Hi
> >
> > I want to store tcp_src, dst port in a variable.
> > This is what I am doing:
> > 1. Retrieve packet from dp_packet_batch one by one.
> > 2. Retrieving field values by extracting packets headers:
> >
> > struct ip_header *ip = dp_packet_l3(packet);
> > nw_proto = ip->ip_proto;
> > if(nw_proto == 6)
> > {
> > struct tcp_header *th = dp_packet_l4(packet);
> > // The following are the 2 different ways I am trying to print the
> tcp_src.
> > I have tried it 1 and 2 separately not at the same time.
> > //1 . Ovs crash at the below statement
> > uint16_t src = (uint16_t) ntohs(th->tcp_src);
> > VLOG_DBG( "tcp_src ---> %d", src );
> > //2. When I enable logging ovs crashes at this point
> > VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src) );
> >
> >
> >  }
> >
> > Can anyone please help how to store tcp_src port value in a variable and
> > print it in vlogs?
> > Statement 2 is working fine if vlogs are disabled, but I want the port
> > value to be stored in a variable and then print.
>
> I'd just get it from the extracted flow instead of inventing new code to
> extract it.
>
___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


Re: [ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-15 Thread Ben Pfaff
On Fri, Feb 15, 2019 at 03:48:22PM +0800, Krish wrote:
> Hi
> 
> I want to store tcp_src, dst port in a variable.
> This is what I am doing:
> 1. Retrieve packet from dp_packet_batch one by one.
> 2. Retrieving field values by extracting packets headers:
> 
> struct ip_header *ip = dp_packet_l3(packet);
> nw_proto = ip->ip_proto;
> if(nw_proto == 6)
> {
> struct tcp_header *th = dp_packet_l4(packet);
> // The following are the 2 different ways I am trying to print the tcp_src.
> I have tried it 1 and 2 separately not at the same time.
> //1 . Ovs crash at the below statement
> uint16_t src = (uint16_t) ntohs(th->tcp_src);
> VLOG_DBG( "tcp_src ---> %d", src );
> //2. When I enable logging ovs crashes at this point
> VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src) );
> 
> 
>  }
> 
> Can anyone please help how to store tcp_src port value in a variable and
> print it in vlogs?
> Statement 2 is working fine if vlogs are disabled, but I want the port
> value to be stored in a variable and then print.

I'd just get it from the extracted flow instead of inventing new code to
extract it.
___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss


[ovs-discuss] How to store the tcp_src or tcp_dst field value in a variable and then print in vlogs?

2019-02-14 Thread Krish
Hi

I want to store tcp_src, dst port in a variable.
This is what I am doing:
1. Retrieve packet from dp_packet_batch one by one.
2. Retrieving field values by extracting packets headers:

struct ip_header *ip = dp_packet_l3(packet);
nw_proto = ip->ip_proto;
if(nw_proto == 6)
{
struct tcp_header *th = dp_packet_l4(packet);
// The following are the 2 different ways I am trying to print the tcp_src.
I have tried it 1 and 2 separately not at the same time.
//1 . Ovs crash at the below statement
uint16_t src = (uint16_t) ntohs(th->tcp_src);
VLOG_DBG( "tcp_src ---> %d", src );
//2. When I enable logging ovs crashes at this point
VLOG_DBG( "tcp_src ---> %d", ntohs(th->tcp_src) );


 }

Can anyone please help how to store tcp_src port value in a variable and
print it in vlogs?
Statement 2 is working fine if vlogs are disabled, but I want the port
value to be stored in a variable and then print.



Thanks
Krish
___
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss