Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The FRR status keep saying Status: "restarting ripd" and cannot start ripd. The restart take almost 5 min to done #17534

Closed
2 tasks done
MinHien-git opened this issue Nov 29, 2024 · 1 comment
Labels
triage Needs further investigation

Comments

@MinHien-git
Copy link

MinHien-git commented Nov 29, 2024

Description

Hi I have a problem when configure rip and ospf in Frrouting version stable (10.2). My Device is debian 12 the follow is my configure for ripd.conf, daemons, and ospfd.conf.
/etc/frr/configure

! RIP configuration file
router rip
 version 2
 timers basic 30 30 30
 network 192.168.2.0/24
 network 192.168.12.0/24
 network 192.168.1.0/24
 no passive-interface eth0
 no passive-interface eth1
 no passive-interface eth6
 redistribute connected
 redistribute ospf
 allow-ecmp
!
log file /var/log/frr/ripd.log

My daemons file configure /etc/frr/daemons

zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=yes
ripngd=no
isisd=no
pimd=no
pim6d=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
sharpd=no
pbrd=no
bfdd=no
fabricd=no
vrrpd=no
pathd=no

#
# If this option is set the /etc/init.d/frr script automatically loads
# the config via "vtysh -b" when the servers are started.
# Check /etc/pam.d/frr if you intend to use "vtysh"!
#
vtysh_enable=yes
zebra_options="  -A 127.0.0.1 -s 90000000"
mgmtd_options="  -A 127.0.0.1"
bgpd_options="   -A 127.0.0.1"
ospfd_options="   -A 127.0.0.1 -f /etc/frr/ospfd.conf"
ospf6d_options=" -A ::1"
ripd_options="   -A 127.0.0.1 -f /etc/frr/ripd.conf"
ripngd_options=" -A ::1"
isisd_options="  -A 127.0.0.1"
pimd_options="   -A 127.0.0.1"
pim6d_options="  -A ::1"
ldpd_options="   -A 127.0.0.1"
nhrpd_options="  -A 127.0.0.1"
eigrpd_options=" -A 127.0.0.1"
babeld_options=" -A 127.0.0.1"
sharpd_options=" -A 127.0.0.1"
pbrd_options="   -A 127.0.0.1"
staticd_options="-A 127.0.0.1"


/etc/frr/ospfd.conf

! OSPF configuration file
interface eth1
 ip ospf hello-interval 10
 ip ospf dead-interval 10
 ip ospf retransmit-interval 10
 ip ospf transmit-delay 10
 ip ospf priority 110
interface eth0
 ip ospf hello-interval 10
 ip ospf dead-interval 10
 ip ospf retransmit-interval 10
 ip ospf transmit-delay 10
 ip ospf priority 110
interface eth6
 ip ospf hello-interval 10
 ip ospf dead-interval 10
 ip ospf retransmit-interval 10
 ip ospf transmit-delay 10
 ip ospf priority 110
router ospf
 ospf router-id 2.2.2.2
 no passive-interface eth1
 no passive-interface eth0
 no passive-interface eth6
 network 192.168.2.0/24 area 0
 network 192.168.12.0/24 area 0
 network 192.168.1.0/24 area 0
 network 192.168.20.0/24 area 0
 network 192.168.30.0/24 area 0
 ospf abr-type standard
 redistribute connected
log file /var/log/frr/ospf.log

sudo systemctl status frr

frr.service - FRRouting
    Loaded: loaded (/lib/systemd/system/frr.service; enabled; preset: enabled)
   Drop-In: /etc/systemd/system/frr.service.d
            └─override.conf
    Active: active (running) since Fri 2024-11-29 09:39:02 EST; 6min ago
      Docs: https://frrouting.readthedocs.io/en/latest/setup.html
   Process: 18098 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS)
  Main PID: 18108 (watchfrr)
    Status: "restarting ripd"
     Tasks: 10 (limit: 9261)
    Memory: 21.9M
       CPU: 1.146s
    CGroup: /system.slice/frr.service
            ├─18108 /usr/lib/frr/watchfrr -d -F traditional zebra mgmtd ripd ospfd staticd
            ├─18120 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000
            ├─18125 /usr/lib/frr/mgmtd -d -F traditional -A 127.0.0.1
            ├─18130 /usr/lib/frr/ospfd -d -F traditional -A 127.0.0.1 -f /etc/frr/ospfd.conf
            └─18133 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1

Nov 29 09:45:17 frrinit.sh[19050]:   -d -t              Daemonize after terminal session ends
Nov 29 09:45:17 frrinit.sh[19050]:   -i, --pid_file     Set process identifier file name
Nov 29 09:45:17 frrinit.sh[19050]:   -u, --user         User to run as
Nov 29 09:45:17 frrinit.sh[19050]:   -g, --group        Group to run as
Nov 29 09:45:17 frrinit.sh[19050]:   -z, --socket       Set path of zebra socket
Nov 29 09:45:17 frrinit.sh[19050]:   -A, --vty_addr     Set vty's bind address
Nov 29 09:45:17 frrinit.sh[19050]:   -P, --vty_port     Set vty's port number
Nov 29 09:45:17 frrinit.sh[19050]: Report bugs to https://github.com/frrouting/frr/issues
Nov 29 09:45:17 frrinit.sh[19044]: Failed to start ripd!

It keep saying Status: "restarting ripd" when I enable it via python subproccess it very slow and it return error and it also very slow in the terminal as well. usually in the 8.x version I used previous using python to enable restart and change .conf file the restart is very fast mostly happened right away And the status always return Status: "FRR Operational". I have already tried 3 debian device but it not working non of these. Can anyone help me on this issue. Thank you in advance!

Version

10.2

How to reproduce

I use python to override daemons file

def enable_rip_and_zebra_with_options(enable_rip=True, enable_ospf=True):
    daemons_file_path = "/etc/frr/daemons"

    # Options for ripd and ospfd
    ripd_options = 'ripd_options="   -A 127.0.0.1 -f /etc/frr/ripd.conf"'
    ospfd_options = 'ospfd_options="   -A 127.0.0.1 -f /etc/frr/ospfd.conf"'

    try:
        # Read the current content of the daemons file
        read_command = f'sudo cat {daemons_file_path}'
        result = subprocess.run(read_command, shell=True, capture_output=True, text=True, check=True)
        lines = result.stdout.splitlines()

        updated_lines = []
        ripd_found = False
        ospfd_found = False
        ripd_options_found = False
        ospfd_options_found = False

        for line in lines:
            stripped_line = line.strip()

            # Check for ripd configuration
            if stripped_line.startswith("ripd="):
                updated_lines.append(f"ripd={'yes' if enable_rip else 'no'}")
                ripd_found = True
            # Check for ospfd configuration
            elif stripped_line.startswith("ospfd="):
                updated_lines.append(f"ospfd={'yes' if enable_ospf else 'no'}")
                ospfd_found = True
            # Check for ripd_options configuration
            elif stripped_line.startswith("ripd_options="):
                if enable_rip:
                    updated_lines.append(ripd_options)  # Update with new options
                else:
                    updated_lines.append(stripped_line)  # Keep existing options if not enabled
                ripd_options_found = True
            # Check for ospfd_options configuration
            elif stripped_line.startswith("ospfd_options="):
                if enable_ospf:
                    updated_lines.append(ospfd_options)  # Update with new options
                else:
                    updated_lines.append(stripped_line)  # Keep existing options if not enabled
                ospfd_options_found = True
            else:
                updated_lines.append(line)  # Keep unchanged lines

        # Add ripd if not found
        if not ripd_found:
            updated_lines.append(f"ripd={'yes' if enable_rip else 'no'}")
            if enable_rip:
                updated_lines.append(ripd_options)

        # Add ospfd if not found
        if not ospfd_found:
            updated_lines.append(f"ospfd={'yes' if enable_ospf else 'no'}")
            if enable_ospf:
                updated_lines.append(ospfd_options)

        # Write the updated content back to the daemons file using sudo tee
        with tempfile.NamedTemporaryFile(delete=False) as temp_file:
            temp_file.write("\n".join(updated_lines).encode())
            temp_file_path = temp_file.name

        # Move the temporary file to the original file with sudo
        subprocess.run(f'sudo mv {temp_file_path} {daemons_file_path}', shell=True, check=True)

        syslog.syslog("Daemons file updated successfully.")

    except subprocess.CalledProcessError as e:
        syslog.syslog(f"An error occurred while executing a command: {e}")
    except Exception as e:
        syslog.syslog(f"An unexpected error occurred: {e}")

and run
subprocess.run(['systemctl', 'restart', 'frr.service'], check=True) to restart service after modifying the ripd.conf and ospf.conf i run subprocess.run(['systemctl', 'restart', 'frr.service'], check=True) to restart the service

Expected behavior

The ripd and ospfd running and connect to other ripd, ospfd device and the status when run sudo systemctl status frr
show Status: "FRR Operational"
zebra state -> up : connect succeeded
ripd state -> up : connect succeeded
ospfd state -> up : connect succeeded
staticd state -> up : connect succeeded

Actual behavior

frr.service - FRRouting
    Loaded: loaded (/lib/systemd/system/frr.service; enabled; preset: enabled)
   Drop-In: /etc/systemd/system/frr.service.d
            └─override.conf
    Active: active (running) since Fri 2024-11-29 09:39:02 EST; 6min ago
      Docs: https://frrouting.readthedocs.io/en/latest/setup.html
   Process: 18098 ExecStart=/usr/lib/frr/frrinit.sh start (code=exited, status=0/SUCCESS)
  Main PID: 18108 (watchfrr)
    Status: "restarting ripd"
     Tasks: 10 (limit: 9261)
    Memory: 21.9M
       CPU: 1.146s
    CGroup: /system.slice/frr.service
            ├─18108 /usr/lib/frr/watchfrr -d -F traditional zebra mgmtd ripd ospfd staticd
            ├─18120 /usr/lib/frr/zebra -d -F traditional -A 127.0.0.1 -s 90000000
            ├─18125 /usr/lib/frr/mgmtd -d -F traditional -A 127.0.0.1
            ├─18130 /usr/lib/frr/ospfd -d -F traditional -A 127.0.0.1 -f /etc/frr/ospfd.conf
            └─18133 /usr/lib/frr/staticd -d -F traditional -A 127.0.0.1

Nov 29 09:45:17 frrinit.sh[19050]:   -d -t              Daemonize after terminal session ends
Nov 29 09:45:17 frrinit.sh[19050]:   -i, --pid_file     Set process identifier file name
Nov 29 09:45:17 frrinit.sh[19050]:   -u, --user         User to run as
Nov 29 09:45:17 frrinit.sh[19050]:   -g, --group        Group to run as
Nov 29 09:45:17 frrinit.sh[19050]:   -z, --socket       Set path of zebra socket
Nov 29 09:45:17 frrinit.sh[19050]:   -A, --vty_addr     Set vty's bind address
Nov 29 09:45:17 frrinit.sh[19050]:   -P, --vty_port     Set vty's port number
Nov 29 09:45:17 frrinit.sh[19050]: Report bugs to https://github.com/frrouting/frr/issues
Nov 29 09:45:17 frrinit.sh[19044]: Failed to start ripd!

Additional context

No response

Checklist

  • I have searched the open issues for this bug.
  • I have not included sensitive information in this report.
@MinHien-git MinHien-git added the triage Needs further investigation label Nov 29, 2024
@donaldsharp
Copy link
Member

ripd does not use the -f option anymore and will fail to load as it is telling you. rip is completely integrated into mgmtd and as such you can not use a individual configuration file for it, you must use an integrated config

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
triage Needs further investigation
Projects
None yet
Development

No branches or pull requests

2 participants