Rodrigo
your code should work, but you need another thread to call pfring_loop() on the 
second direction.

Alfredo

On 07 Mar 2014, at 17:12, Rodrigo Jaureguy Dobler <[email protected]> wrote:

> Hi Alfredo, 
> 
> I tried to use the Standard DNA to make a bidirectional bridge for my fault 
> injection application. 
> 
> I used the code of pfdnabounce.c (the part of Standard DNA) as base. 
> 
> I changed the "pfring_set_socket_mode" and the "pfring_set_direction" to 
> allow a bidirectional communication. 
> 
> The problem was when I tried to use the "dna2_to_dna1 function". It do not 
> worked. So I could not make a bidirectional bridge with Standard DNA (it just 
> worked in one way). 
> 
> Could you please say to me if I can make a bidirectional communication with 
> Standard DNA using 2 DNA interfaces?
> 
> If yes, could you please help me to do this?
> 
> 
> Sorry if my questions seem dumb, but I'm just starting with PF_RING.
> 
> Thanks a lot for your help, 
> 
> Rodrigo. 
> 
> 
> 
> 
> Here is the part of the code for the Standard DNA:
> 
> 
> in_dev=dna1;
> out_dev=dna2;
> 
> pd1 = pfring_open(in_dev, 1500 /* snaplen */, PF_RING_PROMISC);
>     if(pd1 == NULL) {
>       printf("pfring_open %s error [%s]\n", in_dev, strerror(errno));
>       return(-1);
>     }
> pfring_set_socket_mode(pd1, send_and_recv_mode);
> 
> 
> 
> pd2 = pfring_open(out_dev, 1500 /* snaplen */, PF_RING_PROMISC); //mudei aqui
>     if(pd2 == NULL) {
>       printf("pfring_open %s error [%s]\n", out_dev, strerror(errno));
>       return(-1);
>     } 
> pfring_set_socket_mode(pd2, send_and_recv_mode);
> 
> 
> 
>  printf("Using Standard DNA\n");
> 
>     pfring_set_direction(pd1, rx_and_tx_direction);   
>     pfring_set_direction(pd2, rx_and_tx_direction);  
> 
>     pfring_enable_ring(pd1);
>     pfring_enable_ring(pd2);
> 
>     pfring_loop(pd1, dna1_to_dna2, (u_char*) NULL, wait_for_packet);
>     //pfring_loop(pd2, dna2_to_dna1, (u_char*) NULL, wait_for_packet);
> 
>     pfring_close(pd1);
>     pfring_close(pd2);
> 
> 
> The functions (declared before the code calls them):
> 
> void dna1_to_dna2(const struct pfring_pkthdr *h, const u_char *p, const 
> u_char *user_bytes) { 
> 
>   // here I will do the fault injection on some packages (from server to 
> client) 
>   pfring_send(pd2, (char*)p, h->caplen, flush);
> }
> 
> 
> void dna2_to_dna1(const struct pfring_pkthdr *h, const u_char *p, const 
> u_char *user_bytes) { 
> 
>   // here I will just let the packages go to the other interface (from client 
> to server) 
>   pfring_send(pd1, (char*)p, h->caplen, flush);
> }
> 
> 
> From: [email protected]
> Date: Fri, 21 Feb 2014 16:29:58 +0100
> To: [email protected]
> Subject: Re: [Ntop-misc] Question about pfdnabounce.c (DNA Bouncer or DNA     
> Cluster)
> 
> Hi Rodrigo
> with the DNA Bouncer (dummyProcessPacketZero) it is not possible to inject 
> packets, you can just return a verdict (pass or drop) for each ingress packet.
> I suggest you to use mode 2 (standard DNA). You could also use the DNA 
> Cluster but I think there is no real advantage (zero-copy + pipeline vs 
> 1-copy + direct-forwarding) and the code would be much more complicated.
> 
> Best Regards
> Alfredo
> 
> On 21 Feb 2014, at 06:13, Rodrigo Jaureguy Dobler <[email protected]> 
> wrote:
> 
> Hello, 
> 
> I need to do a fault injector with bidirectional communication. 
> 
> 
> I tried the pfdnabounce.c with libzero in  2-way bridge mode and it worked 
> perfect. 
> 
> 
> So, I'm thinking to use pfdnabounce.c as the base program. 
> 
> 
> The topology is this:
> 
>    server              bridge (fault injector)          client
>  +-------+                  +------------+                    +-------+
>  |        | <-----------> | dna0     |                     |        |
>  |        |                    |     dna1 |  <-----------> |        |
>  +-------+                  +------------+                    +-------+
> 
> 
> 
> The faults that I want to implement in the fault injector are: 
> 
> 1) Repetition: duplicate one package
> 
> 2) Insertion: inserting one or more messages that are not part of the 
> original sending data
> 
> 3) Incorrect sequence: hold 2 ou 3 pkts and change the order of transmission 
> of those messages.
> 
> 
> 
> 
> DNA Bouncer has this API: 
> 
> int pfring_dna_bouncer_loop ( pfring_dna_bouncer *handle, 
> pfring_dna_bouncer_decision_func func, const u_char *user_bytes, u_int8_t 
> wait_for_packet)
> 
> where we define a function "func" to process the packets.
> 
> 
> My question is this:
> 
>  - Is it possible to modify this function "func" ("dummyProcessPacketZero" in 
> the case of pfdnabounce.c) and use some auxiliary buffer to duplicate and 
> create new packets and hold them (the faults describe above) and after send 
> theses packets with the DNA Bouncer? 
> 
> 
> Is it possible or must I use DNA Cluster to try to do this?
> 
> 
> 
> Thanks a lot for your help and best regards,
> 
> 
> Rodrigo.
> _______________________________________________
> Ntop-misc mailing list
> [email protected]
> http://listgateway.unipi.it/mailman/listinfo/ntop-misc
> 
> 
> _______________________________________________ Ntop-misc mailing list 
> [email protected] 
> http://listgateway.unipi.it/mailman/listinfo/ntop-misc
> _______________________________________________
> Ntop-misc mailing list
> [email protected]
> http://listgateway.unipi.it/mailman/listinfo/ntop-misc

_______________________________________________
Ntop-misc mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-misc

Reply via email to