Hello, I need help with the new queue system pf, what I want is to know how
to add a rule in c using pfvar.h, so far what I have is this:
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <net/pfvar.h>
int main()
{
struct pfioc_queue q;
int device;
if( device < 0 )
err( 1 , "open Error: " );
memset( &q, '\0', sizeof( q ) );
if( ioctl( device, DIOCGETQUEUES, &q ) < 0 ){
err( 1 , "DIOCGETQUEUES Error: " );
return 0;
}
strlcpy( q.queue.qname , "ID1b" , sizeof( "ID1b" ) );
strlcpy( q.queue.parent , "full_bajada" , sizeof( "full_bajada" ) );
strlcpy( q.queue.ifname , "em0" , sizeof( "em0" ) );
q.queue.qlimit = 50;
q.queue.qid = 10;
q.queue.qid = 10;
q.queue.parent_qid = 2;
q.queue.linkshare.m1.absolute = 512000;
q.queue.linkshare.m2.absolute = 512000;
q.queue.upperlimit.m1.absolute = 1024000;
q.queue.upperlimit.m2.absolute = 1024000;
if( ioctl( device, DIOCADDQUEUE , &q ) < 0 ){
err( 1 , "DIOCADDQUEUE Error: " );
return 0;
}
return 0;
}
The code does not throw any errors, but I have doubts about how to get the
ticket, and if something is missing because "pfctl -sq" no new queue
appears.
I get not really understand how it works, if anyone can give me a simple
code example will appreciate.