Hi all, I have been playing with OpenOspf lately, and I came to a place, when I needed to ensure that an ethernet interface should always go into DOWN state when it loses its link (physically, for example the switch becames turned off). I have tried to hire the devd daemon to do the job with such small definitions: notify 100 { match "system" "IFNET"; match "type" "LINK_DOWN"; media-type "ethernet"; action "/sbin/ifconfig $subsystem down"; }; notify 200 { match "system" "IFNET"; match "type" "LINK_UP"; media-type "ethernet"; action "/sbin/ifconfig $subsystem up"; }; And what is happening? Well, basically, when the interface detects that eth cable has been detached, devd triggers and makes it DOWN, which is ok. But, when the card got the cable attached once again (and interface detects the media type and gets ACTIVE state) devd never triggers the second rule, which should get the interface UP again. I have tried that with replacing action statements with ones with proper logging actions, and when interface is UP devd gets the proper state changes information. Now the question is: why devd doesent receive any information from interfaces in DOWN state? Is that proper behaviour, or a bug? Thanks for any reply, and for your attention. P.S. I am resending this message to freebsd-stable list, as I am not sure if freebsd-questions was a proper choice. -- Bart?omiej Rutkowski <brutkowski@lerkins.com>
On Fri, 20 Jul 2007 21:24:15 +0000 Maxim Vetrov <muxas@mail.ru> wrote:> Bart?omiej Rutkowski wrote: > > Hi all, > > > > I have been playing with OpenOspf lately, and I came to a place, when I needed to ensure that an ethernet interface should always go into DOWN state when it loses its link (physically, for example the switch becames turned off). I have tried to hire the devd daemon to do the job with such small definitions: > > > > notify 100 { > > match "system" "IFNET"; > > match "type" "LINK_DOWN"; > > media-type "ethernet"; > > action "/sbin/ifconfig $subsystem down"; > > }; > > > > notify 200 { > > match "system" "IFNET"; > > match "type" "LINK_UP"; > > media-type "ethernet"; > > action "/sbin/ifconfig $subsystem up"; > > }; > > > > And what is happening? Well, basically, when the interface detects that eth cable has been detached, devd triggers and makes it DOWN, which is ok. But, when the card got the cable attached once again (and interface detects the media type and gets ACTIVE state) devd never triggers the second rule, which should get the interface UP again. > > I have tried that with replacing action statements with ones with proper logging actions, and when interface is UP devd gets the proper state changes information. > > > > Now the question is: why devd doesent receive any information from interfaces in DOWN state? Is that proper behaviour, or a bug? Thanks for any reply, and for your attention. > > > > P.S. I am resending this message to freebsd-stable list, as I am not sure if freebsd-questions was a proper choice. > > > > > Probably, there is another notify which action is executed before yours > :-) Devd stops scanning sections on the _first_ matched one. Run devd in > debug mode and watch > > Regards, > MuxasI did my tests with debugging and logger in action directives and now I can confirm that devd does not trigger, when you put eth interface into DOWN state by "#ifconfig ifnameX down". Now, is that intentional behaviour or a bug? This makes those LINK_UP devd triggers totally unusable. You can test this behaviour with such example ruleset: http://rafb.net/p/gTm9CW93.html -- Bart?omiej Rutkowski <brutkowski@lerkins.com>
Bart?omiej Rutkowski wrote:> Hi all, > > I have been playing with OpenOspf lately, and I came to a place, when I needed to ensure that an ethernet interface should always go into DOWN state when it loses its link (physically, for example the switch becames turned off). I have tried to hire the devd daemon to do the job with such small definitions: > > notify 100 { > match "system" "IFNET"; > match "type" "LINK_DOWN"; > media-type "ethernet"; > action "/sbin/ifconfig $subsystem down"; > }; > > notify 200 { > match "system" "IFNET"; > match "type" "LINK_UP"; > media-type "ethernet"; > action "/sbin/ifconfig $subsystem up"; > }; > > And what is happening? Well, basically, when the interface detects that eth cable has been detached, devd triggers and makes it DOWN, which is ok. But, when the card got the cable attached once again (and interface detects the media type and gets ACTIVE state) devd never triggers the second rule, which should get the interface UP again. > I have tried that with replacing action statements with ones with proper logging actions, and when interface is UP devd gets the proper state changes information. > > Now the question is: why devd doesent receive any information from interfaces in DOWN state? Is that proper behaviour, or a bug? Thanks for any reply, and for your attention. > > P.S. I am resending this message to freebsd-stable list, as I am not sure if freebsd-questions was a proper choice. > >Probably, there is another notify which action is executed before yours :-) Devd stops scanning sections on the _first_ matched one. Run devd in debug mode and watch Regards, Muxas