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
