hi all:
The codes is:
#######################################
static int ring_mmap(struct file *file,
6366 struct socket *sock, struct vm_area_struct *vma)
6367 {
6368 struct sock *sk = sock->sk;
6369 struct pf_ring_socket *pfr = ring_sk(sk);
6370 int i, rc;
6371 unsigned long mem_id = vma->vm_pgoff; /* using vm_pgoff as memory
id */
6372 unsigned long size = (unsigned long)(vma->vm_end - vma->vm_start);
6373
6374 if(unlikely(enable_debug))
6375 printk("[PF_RING] %s() called\n", __FUNCTION__);
6376
6377 if(size % PAGE_SIZE) {
6378 if(unlikely(enable_debug))
6379 printk("[PF_RING] %s() failed: len is not multiple of
PAGE_SIZE\n", __FUNCTION__);
6380
6381 return(-EINVAL);
6382 }
6383
6384 if(unlikely(enable_debug))
6385 printk("[PF_RING] %s() called, size: %ld bytes [bucket_len=%d]\n",
6386 __FUNCTION__, size, pfr->bucket_len);
6387
6388 /* Trick for mapping DNA chunks */
6389 if(mem_id >= 100) {
6390 mem_id -= 100;
6391
6392 if(pfr->dna_device) {
#######################################
From kernel/pf_ring.c
I don't understand the value of "mem_id" just are {0, 1, 2, 3, 4, 5,
6}。for examples:
#######################################
6465 switch(mem_id) {
6466 /* RING */
6467 case 0:
6468 if(pfr->dna_device != NULL || pfr->dna_cluster != NULL) {
6469 printk("[PF_RING] %s(): trying to map ring memory on DNA
socket\n", __FUNCTION__);
6470 return(-EINVAL);
6471 }
6472
6473 if(pfr->ring_memory == NULL) {
6474 if(ring_alloc_mem(sk) != 0) {
6475 printk("[PF_RING] %s(): unable to allocate memory\n",
__FUNCTION__);
6476 return(-EINVAL);
6477 }
6478 }
6479
6480 /* If userspace tries to mmap beyond end of our buffer, then
fail */
6481 if(size > pfr->slots_info->tot_mem) {
6482 if(unlikely(enable_debug))
6483 printk("[PF_RING] %s() failed: area too large [%ld >
%llu]\n", __FUNCTION__, size, pfr->slots_info->tot_mem);
6484 return(-EINVAL);
6485 }
6486
6487 if(unlikely(enable_debug))
6488 printk("[PF_RING] mmap [slot_len=%d][tot_slots=%d] for ring
on device %s\n",
6489 pfr->slots_info->slot_len,
pfr->slots_info->min_num_slots, pfr->ring_netdev->dev->name);
6490
6491 if((rc = do_memory_mmap(vma, 0, size, pfr->ring_memory, 0,
VM_LOCKED, 0)) < 0)
6492 return(rc);
6493
6494 break;
6495 case 1:
6496 /* DNA: RX packet descriptors */
#######################################
How would confirm the value of these{0,1,2,3,4,5,6}? Thank you.
_______________________________________________
Ntop-misc mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-misc