ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
hello,
Whenever a Linux machine started it loads all drivers. Then ups Network interfaces eth0,eth1... and then sends ARP packets on its Internal networks Right?
Now what i want is to load my C program executable as soon as network card ups but before it queries for ARP or try to send any packet? How to do that in RH9?
regards,
cranium.
Distribution: Ubuntu 11.4,DD-WRT micro plus ssh,lfs-6.6,Fedora 15,Fedora 16
Posts: 3,233
Rep:
you could also try making your program a kernel module.. but the init process would be easier, look in /etc/init.d/rc.d directory for all services available, and rc.x for each runlevel's services
Is there any palce on RH9 where i can put path to my program to be executed as soon as NIC Interfaces are up by kernel?
Or
I have to write a new service in rc3.d directory for that?
Distribution: Ubuntu 11.4,DD-WRT micro plus ssh,lfs-6.6,Fedora 15,Fedora 16
Posts: 3,233
Rep:
i would start at the /etc/init.d/rc.d/network shell script, perhaps you could modify that to run your program within the network service startup process, /etc/init.d/rcX.d contains links to the actual scripts
hello,
I copied my executable to /root/bin which is in shell path. Now i am able to run it from any directory oce i got console prompt.
But same is not called in /etc/rc.d/rc3.d/S10network when i place a statement in it
/root/bin/test
Is there anything required me to modify? Because after adding rebooting kernel my executable is not executed automatically ?
Ofcourse, ITs saying at bootup that enting in runlevel 3 and as i am getting stable console promt that mean i am bootin g in level3 so that no graphical problem to my linux installation. also i already set it in GRUB also to boot in level 3.
What else required to boot in level3?
Other statement in file S10networks are executing properly with no error message. Now what else i do to add my executable in boot up procedure?
hello,
I have did all things and its booting in level 3. Take a look at S10network that i modifies by adding my executable.
Code:
#! /bin/bash
#
# network Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
# start at boot time.
# probe: true
### BEGIN INIT INFO
# Provides: $network
### END INIT INFO
# Source function library.
. /etc/init.d/functions
if [ ! -f /etc/sysconfig/network ]; then
exit 0
fi
. /etc/sysconfig/network
if [ -f /etc/sysconfig/pcmcia ]; then
. /etc/sysconfig/pcmcia
fi
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0
# if the ip configuration utility isn't around we can't function.
[ -x /sbin/ip ] || exit 1
# Even if IPX is configured, without the utilities we can't do much
[ ! -x /sbin/ipx_internal_net -o ! -x /sbin/ipx_configure ] && IPX=
# Even if VLAN is configured, without the utility we can't do much
[ ! -x /sbin/vconfig ] && VLAN=
# If IPv6 is explicitly configured, make sure it's available.
if [ "$NETWORKING_IPV6" = "yes" ]; then
alias=`modprobe -c | awk '/^alias net-pf-10 / { print $3 }'`
if [ "$alias" != "ipv6" -a ! -f /proc/net/if_inet6 ]; then
echo "alias net-pf-10 ipv6" >> /etc/modules.conf
fi
fi
CWD=`pwd`
cd /etc/sysconfig/network-scripts
. network-functions
# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=`ls ifcfg* | LANG=C egrep -v '(ifcfg-lo|:|rpmsave|rpmorig|rpmnew)' | \
LANG=C egrep -v '(~|\.bak)$' | \
LANG=C egrep 'ifcfg-[A-Za-z0-9\._-]+$' | \
sed 's/^ifcfg-//g'`
# See how we were called.
case "$1" in
start)
# IPv6 hook (pre IPv4 start)
if [ "$NETWORKING_IPV6" = "yes" ]; then
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global start pre
fi
fi
action $"Setting network parameters: " sysctl -e -p /etc/sysctl.conf
# bring up loopback interface
action $"Bringing up loopback interface: " ./ifup ifcfg-lo
case "$IPX" in
yes|true)
/sbin/ipx_configure --auto_primary=$IPXAUTOPRIMARY \
--auto_interface=$IPXAUTOFRAME
if [ "$IPXINTERNALNETNUM" != "0" ]; then
/sbin/ipx_internal_net add $IPXINTERNALNETNUM $IPXINTERNALNODENUM
fi
;;
esac
case "$VLAN" in
yes)
if [ -d /proc/net/vlan ] || modprobe 8021q >/dev/null 2>&1 ; then
action $"Setting 802.1Q VLAN parameters: " /sbin/vconfig set_name_type DEV_PLUS_VID_NO_PAD
else
echo $"No 802.1Q VLAN support available in kernel."
fi
;;
esac
oldhotplug=`sysctl kernel.hotplug 2>/dev/null | \
awk '{ print $3 }' 2>/dev/null`
sysctl -w kernel.hotplug="/bin/true" > /dev/null 2>&1
cipeinterfaces=""
# bring up all other interfaces configured to come up at boot time
for i in $interfaces; do
eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then
cipeinterfaces="$cipeinterfaces $DEVICE"
continue
fi
if LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then
# this loads the module, to preserve ordering
is_available $i
continue
fi
# If we're in confirmation mode, get user confirmation
[ -n "$CONFIRM" ] &&
{
confirm $i
case $? in
0)
:
;;
2)
CONFIRM=
;;
*)
continue
;;
esac
}
action $"Bringing up interface $i: " ./ifup $i boot
done
# Bring up CIPE VPN interfaces
for i in $cipeinterfaces ; do
if ! LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; then
# If we're in confirmation mode, get user confirmation
[ -n "$CONFIRM" ] &&
{
confirm $i
case $? in
0)
:
;;
2)
CONFIRM=
;;
*)
continue
;;
esac
}
action $"Bringing up interface $i: " ./ifup $i boot
fi
done
sysctl -w kernel.hotplug=$oldhotplug > /dev/null 2>&1
# Add non interface-specific static-routes.
if [ -f /etc/sysconfig/static-routes ]; then
grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
/sbin/route add -$args
done
fi
# IPv6 hook (post IPv4 start)
if [ "$NETWORKING_IPV6" = "yes" ]; then
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global start post
fi
fi
# Run this again to catch any interface-specific actions
sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
touch /var/lock/subsys/network
;;
stop)
/root/bin/test ##################MY ADDITIONS####################
# If this is a final shutdown/halt, check for network FS,
# and unmount them even if the user didn't turn on netfs
if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]; then
NFSMTAB=`LC_ALL=C awk '!/^#/ && $3 == "nfs" { print $2 }' /proc/mounts`
SMBMTAB=`LC_ALL=C awk '!/^#/ && $3 == "smbfs" { print $2 }' /proc/mounts`
NCPMTAB=`LC_ALL=C awk '!/^#/ && $3 == "ncpfs" { print $2 }' /proc/mounts`
if [ -n "$NFSMTAB" -o -n "$SMBMTAB" -o -n "$NCPMTAB" ] ; then
/etc/init.d/netfs stop
fi
fi
# IPv6 hook (pre IPv4 stop)
if [ "$NETWORKING_IPV6" = "yes" ]; then
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global stop pre
fi
fi
# shut down all interfaces (other than loopback)
for i in $interfaces ; do
eval $(fgrep "DEVICE=" ifcfg-$i)
if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
if ! check_device_down $i; then
action $"Shutting down interface $i: " ./ifdown $i boot
fi
done
case "$IPX" in
yes|true)
if [ "$IPXINTERNALNETNUM" != "0" ]; then
/sbin/ipx_internal_net del
fi
;;
esac
action $"Shutting down loopback interface: " ./ifdown ifcfg-lo
if [ -d /proc/sys/net/ipv4 ]; then
if [ -f /proc/sys/net/ipv4/ip_forward ]; then
if [ `cat /proc/sys/net/ipv4/ip_forward` != 0 ]; then
action $"Disabling IPv4 packet forwarding: " sysctl -w net.ipv4.ip_forward=0
fi
fi
if [ -f /proc/sys/net/ipv4/ip_always_defrag ]; then
if [ `cat /proc/sys/net/ipv4/ip_always_defrag` != 0 ]; then
action $"Disabling IPv4 automatic defragmentation: " sysctl -w net.ipv4.ip_always_defrag=0
fi
fi
fi
# IPv6 hook (post IPv4 stop)
if [ "$NETWORKING_IPV6" = "yes" ]; then
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global stop post
fi
fi
rm -f /var/lock/subsys/network
;;
status)
echo $"Configured devices:"
echo lo $interfaces
echo $"Currently active devices:"
echo `/sbin/ip -o link show | awk -F ": " '/UP>/ { print $2 }'`
;;
restart|reload)
cd $CWD
$0 stop
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
Your stuff appears to be under the stop) option in the case statement, so it will only be run when "service network stop" is run. You want your program to run when the network is started, not when it's stopped, so put it under the start) option of the case and that should do it.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.