[LARTC] How to mark a device not to be used with IMQ?

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Nils Lichtenfeld schrieb:
> Hello Patrick!

Hi Nils,
 
> From: "Patrick McHardy" <kaber@trash.net>
> > > this is only internal mark to know whether the skb was
> > > already in IMQ. You could use it but you would have to
> > > add new user parameter to the interface structure.
> > > I didn't want to do it as I want the pach to be as simple
> > > as possible.
> > > devik
> 
> > The same problem was bugging me a couple of days ago so i wrote an
> > iptables target which
> > allows you to exclude packets from beeing enqueued to the imq device.
> > The patch is tested with iptables-1.2.6a but should work with almost any
> > recent version.
> > After applying it you have to execute a "chmod +x
> > extensions/.IMQX-test", then
> > make patch-o-matic as usual.
> 
> This sounds great and might be usefull in the future. We are still using 2.2.19
> here so no iptables atm.

I think you can easily write an ipchains modul which accomplishes the
same,
all you have to do is to set 'from_imq" to 1 in the skb.
A good start might be the MARK target, modifying (the iptables one) for
imq
took only a couple of minutes.

> By the way: Imagine the IMQ-device is allready up and a new ISDN-device is
> comming up, will the packages of the new ISDN-device automatically be send to
> IMQ or do I have to take the IMQ-device down and up again?

>From net/core/core.c:
int dev_queue_xmit(struct sk_buff *skb)
...
#ifdef CONFIG_IMQ
        /* special intermediate queue up ? */
        if (imq_dev.flags&IFF_UP && !skb->from_imq) {
            spin_lock_bh(&imq_dev.queue_lock);
            q = imq_dev.qdisc;
            if (q->enqueue) {
                int ret = q->enqueue(skb, q);

                qdisc_run(&imq_dev);
                spin_unlock_bh(&imq_dev.queue_lock);
                return ret == NET_XMIT_BYPASS ? NET_XMIT_SUCCESS : ret;
            }
            spin_unlock_bh(&imq_dev.queue_lock);
        }
#endif
...

So i would say everything will be going to the IMQ device automatically.

Bye,
Patrick


[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux