Hi Alfredo
I tried your suggestions and they work fine!
I have another question.
Is it possible to know master interfaces indexes (i.e. indexes of dna0 and
dna1, for example) from a "slave" handle?
In the pfdnacluster_multithread and pfdnabounce examples, these indexes are
saved from the master thread into global variables and so the slaves
threads are able to read them.
In our test-case, master and slaves are different processes: how are the
slaves able to know the indexes to use in the pfring_set_pkt_buff_ifindex()
calls? Must they have a reference to interface names and use something like
if_nametoindex()?

Thanks for your support!

Ivan


On 5 August 2013 13:58, Alfredo Cardigliano <[email protected]> wrote:

> No, you can't use the same pfring "slave" handle in different threads at
> the same time.
>
> Alfredo
>
>
> On Aug 5, 2013, at 1:55 PM, Ivan Nardi <[email protected]> wrote:
>
> Hi Alfredo,
>
> Thanks for your fast replay!
>  I'll have a look at it, thanks!
>
> Another question: are these functions "thread safe", i.e. can I send my
> pkts from another thread respect the thread reading from the cluster?
> Best Regards
>
> I
> van
>
>
>
> On 5 August 2013 13:09, Alfredo Cardigliano <[email protected]> wrote:
>
>> Hi Ivan
>> you should reserve per-slave buffers (see the 3rd parameter of
>> dna_cluster_low_level_settings()) for allocation
>> via pfring_alloc_pkt_buff().
>> Your code should look like this:
>>
>> tmp_pkt_handle = pfring_alloc_pkt_buff(ring[slave_id])
>>
>> while (1) {
>>     pfring_recv_pkt_buff(pd, pkt_handle, ...);
>>     /* analyze pkt */
>>     pfring_set_pkt_buff_ifindex(ring[slave_id], pkt_handle, out_index);
>>     pfring_send_pkt_buff(ring[slave_id], pkt_handle,...);
>>
>>     if (condition) {
>>         buffer = pfring_get_pkt_buff_data(ring[slave_id], tmp_pkt_handle);
>>         create_new_pkt(buffer);
>>         pfring_set_pkt_buff_ifindex(ring[slave_id], tmp_pkt_handle,
>> out_index);
>>         pfring_send_pkt_buff(ring[slave_id], tmp_pkt_handle,...);
>>     }
>> }
>>
>> Best Regards
>> Alfredo
>>
>> On Aug 5, 2013, at 12:56 PM, Ivan Nardi <[email protected]> wrote:
>>
>> Hi guys.
>>
>> We are using libzero with dna-cluster to analyze and forwarding|bouncing
>> packets.
>>  We would like to send through the cluster some packets created by
>> ourselves too, other than the captured ones.
>> Something like that (in pseudo-code):
>>
>> while (1) {
>>     pfring_recv_pkt_buff(pd, pkt_handle, ...);
>>     /* analyze pkt */
>>     pfring_set_pkt_buff_ifindex(pd, pkt_handle, out_index);
>>     pfring_send_pkt_buff(pd, pkt_handle,...);
>>
>>     if (condition) {
>>         data = create_new_pkt(...);
>>         send_data_through_cluster(pd, data, out_index2)
>>     }
>> }
>>
>> Which is the best way to do it?
>> Can we use the standard function pfring_send_ifindex() even with cluster?
>> Is there a better way?
>> Thanks in advance!
>>
>> Ivan
>>  _______________________________________________
>> Ntop-dev mailing list
>> [email protected]
>> http://listgateway.unipi.it/mailman/listinfo/ntop-dev
>>
>>
>>
>> _______________________________________________
>> Ntop-dev mailing list
>> [email protected]
>> http://listgateway.unipi.it/mailman/listinfo/ntop-dev
>>
>>
> _______________________________________________
> Ntop-dev mailing list
> [email protected]
> http://listgateway.unipi.it/mailman/listinfo/ntop-dev
>
>
>
> _______________________________________________
> Ntop-dev mailing list
> [email protected]
> http://listgateway.unipi.it/mailman/listinfo/ntop-dev
>
>
_______________________________________________
Ntop-dev mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-dev

Reply via email to