The tool that will most often be used to configure and troubleshoot the router is the CLI. The JUNOS software CLI is one of the most user-friendly and feature-rich in the industry. Most users spend years attempting to master other router vendors’ CLIs, whereas JUNOS software can be mastered in just a few hours. Other configuration methods do exist, such as a web GUI called Jweb (see Figure 1-4), which is often used on the J-series routers. Note that the operation of Jweb is beyond the scope of this book, so all configuration examples will be shown via CLI commands instead.
The CLI has two modes: operational and configuration. Operational mode is where you can troubleshoot and monitor the software, router, and network. Configuration mode is where the actual statements for interfaces, routing protocols, and others are placed.
Tip
Every command that can be run in operational mode can also be used in configuration mode with the additional keyword run
. For example, if the command show route
is issued in operational mode, it can be issued as run show route
in configuration mode.
When a user first enters the router via Telnet, Secure Shell (SSH), or direct console access, the user will see a login prompt. After entering the correct username and password, the user will be placed directly into operational mode. Operational mode will be designated by the >
(chevron) character at the router prompt of username@hostname. As shown here, user doug
logs into a router called Hops
:
Hops (ttyd0)
login:doug
Password:
--- JUNOS 8.0R1.9 built 2006-08-11 16:25:40 UTC
doug@Hops>
An exception to being automatically placed into operational mode occurs when you log in as user root
. In this case, the user will actually be placed into the shell (designated by the percent sign) and will have to start the CLI process manually:
Hops (ttyd0)
login:root
Password:
--- JUNOS 8.0R2.8 built 2006-09-29 09:22:36 UTC
root@Hops% cli
root@Hops>
Most of the commands that you will run in operational mode are show
commands, which allow you to gather information about the routing protocols, interfaces, router’s software, and router’s hardware. Ping
, traceroute
, telnet
, and ssh
can also be performed from this mode. Finally, some very JUNOS-specific commands, such as request
, restart
, and test
, may be issued. Request
commands perform system-wide functions such as rebooting, upgrading, and shutting down the router. Restart
commands are similar to the Unix-style kill
commands, which allow you to restart certain software processes. Test
commands allow verifications for save configuration files, proactive testing of policies, and interface testing such as BERT (bit error rate testing) and FEAC (far-end alarm and control) loopbacks.
Tip
You should use the restart
command with great caution! Depending on the software process being restarted, the consequences could be severe. Restarting the SNMP process would probably get you a slap on the wrist, but restarting the routing process could be a reason to go into hiding on a remote island!
There are a few general JUNOS software CLI features worth mentioning, including command completion, EMACs-style keys, and pipe commands.
The command completion feature will save you lots of time and energy, as it provides syntax checking as you type. Gone are the days when a command is typed on a line and, after pressing Enter, the command is either invalid or not supported on that version of software. Any error or ambiguity will be detected early, and the router will present a list of possible valid completions. Command completion is accomplished by using either the Space bar or the Tab key. Either one will complete a command for you, but the Tab key can also complete variables such as interface names, IP addresses, filter names, and filenames. For example, to view the configuration of a certain ATM interface, you would type the following:
doug@Hops>sh<space>
owconf<space>
igurationint<space>
erfacesat<tab>
−0/2/1<enter>
Notice that the Space bar is used until a variable is reached and the interface name is used when the Tab key must be used (as the Space bar completes only commands and not variables).
Tip
For the reader with experience using Cisco’s IOS, command completion makes for an easy transition. First, forget about the word IP, as the IOS command show ip route
simply becomes show route
in JUNOS. Also, common IOS abbreviations such as sh int
will still work in JUNOS if you type doug@hops> sh<space>ow int<enter>
.
In the previous example, the syntax checker went word by word each time the Space bar or Tab key was pressed, and the minimum characters were typed to avoid ambiguity. What would happen if the syntax checker noticed an error or incomplete word? It would state this ambiguity and list the possible completions:
user@host>show ip<space>
^
'ip' is ambiguous.
Possible completions:
ipsec Show IP Security information
ipv6 Show IP version 6 information
Another useful JUNOS feature set in the router itself is the use of EMACs-style keystrokes when in vt100 mode. This allows you to move the cursor around the command line or to edit the command line. Some useful EMACs keystrokes are:
- Ctrl-b
Move the cursor back one character.
- Ctrl-a
Move the cursor to the beginning of the command line.
- Ctrl-e
Move the cursor to the end of the command line.
- Ctrl-k
Delete all words from the cursor to the end of the line.
- Ctrl-x
Delete or clear the entire line.
- Ctrl-l
Redraw the current line.
- Ctrl-p
Scroll backward through the previously typed commands. You also can use the Up arrow for this purpose.
- Ctrl-n
Scroll forward through the previously typed commands. You also can use the Down arrow for this purpose.
- Ctrl-r
Search the previous CLI history for a search string.
The last important feature to call out in the JUNOS software CLI is the use of pipe commands to control the output of any command. For example, when a command such as show
is issued, the data is placed into a buffer and is displayed when the Enter key is pressed. A pipe command allows the display buffer to be altered. Many pipe commands can be used on the router, but let’s examine the most common applications and pipe commands:
-
count
Count the lines in the output:
doug@Hops>
show interfaces terse | count
Count: 29 lines-
display
Show additional data; for example, XML tags or set commands:
doug@Hops>
show configuration | display set
set version 8.0R2.9 set system host-name Hops set system backup-router 10.210.8.30 set system backup-router destination 0.0.0.0/0 set system ports console type vt100 set system root-authentication encrypted-password "$1$G/ pd5odz$eYJi89TZkRxDWitUBB3of0" set system login class view-only permissions view set system login user doug uid 2019 set system login user doug class super-user set system login user doug authentication encrypted-password "$1$sr.a1nvE$K573iU. bHSZkLiW9SMWwg." set system login user lab uid 2021 set system login user lab class super-user set system login user lab authentication encrypted-password "$1$/ z4qeiUp$ocnPhXAbz1xzDoTUKRhgm." set system login user restricted uid 2022 set system login user restricted class view-only set system login user restricted authentication encrypted-password "$1$tYpOu. Hv$tpeT0xf.3pIrlsOZEPNls0" set system services ftp set system services ssh set system services telnet set system syslog user * any emergency set system syslog file messages any notice set system syslog file messages authorization info set system syslog file cli-commands interactive-commands any set system syslog file cli-commands archive size 1m set system syslog file cli-commands archive files 10 set system syslog file config-changes change-log any set system compress-configuration-files set interfaces lo0 unit 0 family inet address 192.168.16.1/32 set routing-options static route 0.0.0.0/0 next-hop 10.210.8.30 set routing-options static route 0.0.0.0/0 retain set routing-options static route 0.0.0.0/0 no-readvertise-
except
Omit lines from the output:
doug@Hops>
show interfaces terse | except fe
Interface Admin Link Proto Local Remote at-0/2/0 up up at-0/2/0.100 up up inet 10.0.16.1/24 at-0/2/1 up up at-0/2/1.100 up up inet 10.0.15.2/24 dsc up up fxp0 up up fxp0.0 up up inet 10.210.8.1/27 fxp1 up up fxp1.0 up up inet 10.0.0.4/8 tnp 4 gre up up ipip up up lo0 up up lo0.0 up up inet 192.168.16.1 --> 0/0 lo0.16385 up up inet lsi up up mtun up up pimd up up pime up up tap up up-
find
Begin the output at the specified string:
Doug@Hops>
show interfaces fe-0/0/2 extensive | find traffic
Traffic statistics: Input bytes : 8574 0 bps Output bytes : 11923 0 bps Input packets: 88 0 pps Output packets: 127 0 pps Input errors: Errors: 0, Drops: 0, Framing errors: 0, Runts: 0, Policed discards: 0, L3 incompletes: 0, L2 channel errors: 0, L2 mismatch timeouts: 0, FIFO errors: 0, Resource errors: 0 Output errors: Carrier transitions: 1, Errors: 0, Drops: 0, Collisions: 0, Aged packets: 0, FIFO errors: 0, HS link CRC errors: 0, MTU errors: 0, Resource errors: 0 Active alarms : None Active defects : None-
hold
Retain the output in the buffer until cleared:
doug@Hops>
show route | hold
inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/5] 03:47:27 > to 10.210.8.30 via fxp0.0 10.0.15.0/24 *[Direct/0] 03:02:54 > via at-0/2/1.100 10.0.15.2/32 *[Local/0] 03:02:54 Local via at-0/2/1.100 10.0.16.0/24 *[Direct/0] 03:05:15 > via at-0/2/0.100 10.0.16.1/32 *[Local/0] 03:05:15 Local via at-0/2/0.100 10.0.21.0/24 *[Direct/0] 03:14:56 > via fe-0/0/2.0 10.0.21.1/32 *[Local/0] 03:14:56 Local via fe-0/0/2.0 10.210.8.0/27 *[Direct/0] 03:47:27 > via fxp0.0 10.210.8.1/32 *[Local/0] 03:47:27 Local via fxp0.0 192.168.16.1/32 *[Direct/0] 03:14:56 > via lo0.0 _ _juniper_private1_ _.inet.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 10.0.0.0/8 *[Direct/0] 08:39:21 > via fxp1.0 10.0.0.4/32 *[Local/0] 08:39:21 Local via fxp1.0 _ _juniper_private1_ _.inet6.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both fe80::/64 *[Direct/0] 08:39:21 > via fxp1.0 fe80::200:ff:fe00:4/128 *[Local/0] 08:39:21 Local via fxp1.0 fe80::2a0:a5ff:fe12:2775/128 *[Direct/0] 08:39:21 > via lo0.16385 fec0::/64 *[Direct/0] 08:39:21 > via fxp1.0 fec0::10:0:0:4/128 *[Local/0] 08:39:21 Local via fxp1.0 ---(more 100%)----
match
Display only lines with the specified string:
doug@Hops>
show log messages | match "jun 4"
Jun 4 09:04:13 HongKong login: LOGIN_PAM_AUTHENTICATION_ERROR: PAM authentication error for user lab Jun 4 09:04:13 HongKong login: LOGIN_FAILED: Login failed for user lab from host Jun 4 09:04:16 HongKong login: LOGIN_INFORMATION: User lab logged in from host [unknown] on device ttyd0 Jun 4 09:07:04 HongKong sshd[3685]: Accepted publickey for root from 10.210.8.28 port 58349 ssh2 Jun 4 09:07:08 HongKong sshd[3690]: Accepted publickey for root from 10.210.8.28 port 62534 ssh2 Jun 4 10:50:45 HongKong mgd[3681]: UI_RESTART_EVENT: User 'lab' restarting daemon 'Routing protocol daemon' Jun 4 10:50:45 HongKong rpd[3083]: RPD_SIGNAL_TERMINATE: first termination signal received Jun 4 10:50:45 HongKong snmpd[3108]: SNMPD_CLOSE_SA_IPC: ipc_free_local: closed IPC socket /var/run/rpd_s-
no-more
Do not paginate the output:
doug@Hops>
show system statistics arp | no-more
arp: 3429 datagrams received 32 ARP requests received 243 ARP replys received 17 resolution requests received 0 unrestricted proxy requests 0 received proxy requests 0 proxy requests not proxied 0 with bogus interface 0 with incorrect length 0 for non-IP protocol 0 with unsupported op code 0 with bad protocol address length 0 with bad hardware address length 0 with multicast source address 0 with multicast target address 0 with my own hardware address 3 for an address not on the interface 0 with a broadcast source address 0 with source address duplicate to mine 3151 which were not for me 10 packets discarded waiting for resolution 16 packets sent after waiting for resolution 269 ARP requests sent 32 ARP replys sent 0 requests for memory denied 0 requests dropped on entry 0 requests dropped during retry-
save
Save the output to a file to the user home directory:
doug@Hops>
show interfaces | save interface_hops
Wrote 272 lines of output to 'interface_hops'
Multiple pipe commands are treated as a logical AND, meaning the output must match both of the commands listed. This could come in the form of different pipe commands in the command list or as the same pipe command listed multiple times. To count how many /27 masks are in your route table, issue this command:
doug@Hops>show route | match /27 | count
Count: 1 lines
In comparison, use the same pipe command on a single line to show all /32 routes that start with a 10.0 prefix:
doug@Hops>show route | match /32 | match 10.0
10.0.15.2/32 *[Local/0] 03:18:28
10.0.16.1/32 *[Local/0] 03:20:49
10.0.21.1/32 *[Local/0] 03:30:30
10.0.0.4/32 *[Local/0] 08:54:55
Pipe commands are not limited to a logical AND, however, as a logical OR operation can also be performed. Do this by wrapping the string in quotation marks and using the OR operator:
doug@Hops>show route | match "/32|10.0"
10.0.15.0/24 *[Direct/0] 03:22:46
10.0.15.2/32 *[Local/0] 03:22:46
10.0.16.0/24 *[Direct/0] 03:25:07
10.0.16.1/32 *[Local/0] 03:25:07
10.0.21.0/24 *[Direct/0] 03:34:48
10.0.21.1/32 *[Local/0] 03:34:48
10.210.8.1/32 *[Local/0] 04:07:19
192.168.16.1/32 *[Direct/0] 03:34:48
10.0.0.0/8 *[Direct/0] 08:59:13
10.0.0.4/32 *[Local/0] 08:59:13
fec0::10:0:0:4/128 *[Local/0] 08:59:13
To actually configure the router, enter configuration mode by typing the word configure
in operational mode. The router prompt will change to the octothorpe (#
) symbol:
doug@Hops>configure
Entering configuration mode
[edit]
doug@Hops#
By default, when entering configuration mode, multiple users can enter the router and make changes at the same time. To avoid any issues that may arise, you can use the configure exclusive
or configure private
command. The former command allows only a single user to configure the router, whereas the latter command allows multiple users to configure different pieces of the configuration. If you use configure exclusive
, no other users can make changes to the configuration besides the single user that entered exclusively. Using private mode, each user will get a copy of the current configuration and only changes that they make will be applied. If two users attempt to make the same change, such as adding an IP address to the same interface, the change will be rejected and both users will exit configuration mode to resolve their conflict.
In configuration mode, you can add configuration by using a set
command. For example, to enable the Telnet server application on the router, issue this command:
doug@Hops# set system services telnet
The CLI is actually composed of many directories and subdirectories, which will eventually contain the command that is input. You can think of this as you would a PC, where the hard drive is normally named C:\ and it is partitioned into directories such as Windows, program files, drivers, and so on. These directories may contain subdirectories, which will eventually contain files or applications.
C:\>dir/w
Volume in drive C has no label.
Volume SerialNumber
is 7806-197A
Directory of C:\
AUTOEXEC.BAT [Backup]
bi-admin.dat Catalog.LiveSubscribe
[Config.Msi] CONFIG.SYS
[dell] [Dell962]
dlbx.log dlbxscan.log
[Documents and Settings] [drivers]
DVDPATH.TXT [ERDNT]
[f403a5940e14ba07a40a99897c] [HP LJ1160-LJ1320]
HuskyInstallerLog.txt [i386]
INFCACHE.1 [ipv0011]
[ipv0021] [My Downloads]
[nslabs] [Program Files]
[reg_backup] statusclient.log
tmuninst.ini ut.bat
ut9x.bat [WINDOWS]
[Xitami] YServer.txt
14 File(s) 4,055,509 bytes
18 Dir(s) 26,173,308,928 bytes free
In JUNOS software, the top level, or C:\, is named edit
, with multiple directories partitioned below it. You can view these directories by using the set ?
command:
[edit] doug@Hops# set ? Possible completions: > access Network access configuration > accounting-options Accounting data configuration > applications Define applications by protocol characteristics + apply-groups Groups from which to inherit configuration data > chassis Chassis configuration > class-of-service Class-of-service configuration > event-options Event processing configuration > firewall Define a firewall configuration > forwarding-options Configure options to control packet sampling > groups Configuration groups > interfaces Interface configuration > policy-options Routing policy option configuration > protocols Routing protocol configuration > routing-instances Routing instance configuration > routing-options Protocol-independent routing option configuration > security Security configuration > services Service PIC applications settings > snmp Simple Network Management Protocol configuration > system System parameters
So, when you issue the command set system services telnet
, the system directory is accessed, followed by the subdirectory services and ending in the command telnet
to enable the Telnet service. Figure 1-5 shows a partial directory tree to illustrate this process. Thankfully, you do not need to memorize the entire hierarchical tree structure, but it is important to understand the hierarchical structure and how it relates to configuration mode commands.
The opposite of the set
command to remove configuration from the router is the delete
command. Usually this command is used to remove a single line, but you also can use it to remove an entire hierarchy. In the simplest case, for example, to remove the Telnet service from the router, change the previous set
command to a delete
command:
doug@Hops#delete system services telnet
Warning
Be careful when issuing a delete
command without noting any specific command, as this could remove an entire directory and have less than desirable consequences.
You can issue configuration commands such as set
and delete
from the top root level or from inside a subdirectory. To navigate to a subdirectory, issue an edit
command, which is essentially a change directory command. If the Telnet service needed to be enabled, you could use an alternative method of moving into the subdirectory system services and then issuing a short set
command:
[edit] doug@Hops#edit system services
[edit system services] doug@Hops#set telnet
Using the edit
command is not necessary, but it allows the user to issue shorter set
commands when compared to the top level. Just like choosing a color for a new car, you can choose how you want to configure the router as long as the desired result is achieved. Once in a certain directory, there are multiple ways to navigate the directory tree using commands such as up
, top
, and even exit
. The up
command will move you up one level in the directory tree or multiple levels if a numerical value is given after the up
command:
[edit system services] doug@Hops#up
[edit system] doug@Hops#edit services
[edit system services] doug@Hops#up 2
[edit] doug@Hops#
From any hierarchy, you can issue the top
command to move you up to the root level of the configuration tree. It has the added functionality of allowing multiple configuration statements after issuing the command, such as top edit
or top set
:
[edit system services] doug@Hopstop
[edit] doug@Hops#edit system services
[edit system services] doug@Hops#top edit protocols ospf
[edit protocols ospf] doug@Hops#
Another nice feature of configuration mode allows you to view the configuration that was just completed by issuing a show
command. For instance, to view the configuration of the system services, issue this command:
[edit]
doug@Hops#show system services
ftp;
ssh;
telnet;
Or try yet another way to view the system services, by issuing the show
command inside the subdirectory in question. A show
command with no additional arguments shows the configuration from that hierarchy and below:
[edit] doug@Hops#edit system services
[edit system services] doug@Hops#show
ftp; ssh; telnet;
After issuing a plethora of set
and delete
commands, the keen user will notice that no changes have actually occurred in the router! To apply the changes, a special word—one that is often difficult to say in the real world—must be used: commit. To understand what is occurring when issuing the commit
command, it’s best to examine the different types of configurations that occur in the JUNOS router.
A Juniper Networks router has two configuration files that are always present: the candidate configuration and the active configuration. The active configuration is the current running configuration in the router, whereas the candidate configuration is the temporary text file that is being modified while in configuration mode. When the commit
command is issued, the candidate configuration becomes the active configuration if no syntax errors are detected. In addition, the old active configuration is archived into a file called a rollback 1. So, if a mistake is made, you can easily recover the old active configuration by issuing a rollback 1
. This causes the candidate configuration to be replaced by the old active configuration. A commit
command must then be issued to activate this rollback file. JUNOS saves not only this last active configuration, but also the previous 49 configurations. Each time a commit is issued, the archived file shifts down the list of 49. The first commit creates a rollback 1, the second commit (the old active) becomes rollback 1, the old rollback 1 becomes rollback 2, and so on, down the line. Figure 1-6 illustrates this rollback process.
Another important rollback command that can be useful is a rollback 0, which copies the active configuration to the candidate configuration. As an example, imagine that user doug
logs into a router and issues a command to change the hostname of the router to a less desirable name, but does not actually activate the change.
doug@Hops>configure
Entering configuration mode [edit] doug@Hops# set system host-name yousmell [edit] doug@Hops#exit
The configuration has been changed but not committed Exit with uncommitted changes? [yes,no] (yes) yes Exiting configuration mode doug@Hops>exit
A new user logs into the router, enters configuration mode, and observes that changes have occurred:
doug@Hops>configure
Entering configuration mode
The configuration has been changed but not committed
[edit]
lab@Hops#
It would seem at first glance that the new user is in between a rock and a hard place, but JUNOS has a very useful pipe command you can use—the compare
command. This command allows any two files, including rollback files, active files, and candidate files, to be compared and the differences displayed. In this example, the candidate and active configurations will be compared:
[edit]
doug@Hops#show | compare
[edit system]
- host-name Hops;
+ host-name yousmell;
It appears that user doug
has been up to his old pranks again, attempting to change the hostname of the router. If a commit is issued, the hostname Hops
will be removed and the hostname yousmell
will be added. To wipe out these statements, a rollback 0 could be issued to stop doug
and his mischievous ways:
doug@Hops#rollback 0
load complete [edit] lab@Hops#show | compare
One last key point of the two configuration types is that any operational mode command can be issued in configuration mode as long as the keyword run
is issued before the command. For instance:
lab@Hops#ping
^ unknown command. [edit] dougHops#run ping 10.210.8.2
PING 10.210.8.2 (10.210.8.2): 56 data bytes 64 bytes from 10.210.8.2: icmp_seq=0 ttl=64 time=0.387 ms 64 bytes from 10.210.8.2: icmp_seq=1 ttl=64 time=0.296 ms ^C --- 10.210.8.2 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.296/0.342/0.387/0.045 ms
To save the candidate configuration to the user’s home directory, you must issue the save
command while in configuration mode.
Tip
To save an active configuration, issue a show configuration
command and pipe to save
.
It is important to realize which configuration directory you are located in when issuing the save
command, as the command saves from the current hierarchy. To save the entire candidate configuration, issue the save
command from the top of the directory tree:
[edit]
doug@Hops#save junos_is_cool
Wrote 413 lines of configuration to 'junos_is_cool'
Sometimes it is not desirable to save the entire configuration, so to save a portion, simply navigate into the desired directory to be saved. For instance, if every router in your network has the same system login information, you may want to save only that portion to load into other routers later:
[edit system login]
doug@Hops#save only_system_login
Wrote 31 lines of configuration to 'only_system_login'
It would be fantastic to eliminate the need to issue manual saves, so system archival allows for the automatic saving of configurations when issuing a commit or at a set time interval:
doug@Hops#set archival configuration ?
Possible completions:
+ apply-groups Groups from which to inherit configuration data
+ apply-groups-except Don't inherit configuration data from these groups
> archive-sites
transfer-interval Frequency at which file transfer happens (minutes)
transfer-on-commit Transfer after each commit
These files can be FTP’d or scp’d off to a server under the archivel-sites configuration. In the example that follows, every time a commit
is issued, the configuration file is sent to an FTP server with user doug
, password okemos123
, and IP address 66.17.3.254
, and then into the /config/junos directory:
archival { configuration { transfer-on-commit; archive-sites { "ftp://doug:okemos123@66.17.3.254/config/junos"; }
The opposite of saving a configuration is loading a configuration, which you can accomplish by the load
command. There are several variations of the load
command:
doug@Hops# load ? Possible completions: factory-default Override existing configuration with factory default merge Merge contents with existing configuration override Override existing configuration patch Load patch file into configuration replace Replace configuration data set Execute set of commands on existing configuration update Update existing configuration
Although each type of load
command has its advantages, we will examine only the most common command variations here. One of the most common loads is the override
command, which replaces the current candidate configuration with the specified file:
[edit]
doug@Hops#load override junos_is_cool
load complete
The merge
switch will also be used often when just a small piece of configuration needs to be added to the candidate configuration. For instance, you can issue the following command to add the system login configuration saved previously:
[edit]
doug@Hops#load merge only_system_login
load complete
Since it is highly likely that more than one router will exist in a network, cutting and pasting configurations can give you a few more hours of free time in your life. There are several ways to cut and paste configurations into the router, including using variations of the load
command, or copying set
commands directly into the router. The oldest JUNOS software method is to use the load
command with the terminal
option, which opens a terminal buffer, allowing full or partial configurations to be pasted in:
doug@Hops#load merge terminal
[Type ^D at a new line to end input]
system {
services {
ftp;
ssh;
telnet;
}
}
load complete
Cutting and pasting using this method definitely takes some practice, as the proper number of levels and braces must always be present. The terminal
command always assumes that the entire top-level hierarchy is known. If the upper-level directories are not included, errors will occur and the relative
keyword could become very useful:
[edit]
doug@Hops#load merge terminal
[Type ^D at a new line to end input]
services {
ftp;
terminal:2:(7) syntax error: ftp
[edit services]
'ftp;'
syntax error
ssh;
telnet;
}
[edit]
'services'
warning: statement has no contents; ignored
load complete (1 errors)
Since the pasting started at the services level and not at the system level, the pasting causes errors and does not complete. One solution is to navigate to the system directory and indicate that the configuration will be loaded relative
to that directory:
[edit] doug@Hops#edit system
[edit system] doug@Hops#load merge terminal relative
[Type ^D at a new line to end input] services { ftp; ssh; telnet; } load complete
Or perhaps a simpler method would be to load set
commands directly into the router by simply pasting a carriage return after each set
command or by using the load set
command:
doug@Hopsload set terminal
[Type ^D at a new line to end input]
set system services ftp
set system services ssh
set system services telnet
load complete
If the router is causing you problems, simply ask it for help. You can accomplish this in a few ways. The first is with a question mark (?
) to display possible command completions:
doug@Hops#set system login ?
Possible completions:
announcement System announcement message (displayed after
login)
+ apply-groups Groups from which to inherit configuration
data
+ apply-groups-except Don't inherit configuration data from these
groups
> class Login class
message System login message
> password
> user Username
The >
character indicates a directory that contains subdirectories, +
indicates a command that takes multiple arguments, and no symbol means the command takes a single argument or is in fact the end statement of a command.
The help
command is a secret resource of which few are aware. This displays the same technical documentation that can also be located online. Sometimes a small piece of a command is remembered but not the full statement; help
can aid in finding that full command by searching through the JUNOS software configuration tree for a particular string:
doug@Hops#help apropos host-name
set system host-name <host-name>
Hostname for this router
set system static-host-mapping <host-name> Fully qualified name of system set system services dhcp static-binding <mac-address> host-name <host-name> Hostname for this client set system syslog host Host to be notified set interfaces <interface_name> services-options syslog host <host-name> Name of host to notify set accounting-options routing-engine-profile <profile-name> fields host-name Hostname for this router set services l2tp tunnel-group <name> syslog host <host-name> Name of host to notify set services service-set <service-set-name> syslog host <host-name> Name of host to notify
If you encounter a command in the router that needs clarification, you can obtain more information by issuing the help topic
or help reference
command. The former will display general usage guidelines for that command:
doug@Hops#help topic ospf hello-interval
Modifying the Hello Interval
Routers send hello packets at a fixed interval on all interfaces,
including virtual links, to establish and maintain neighbor
relationships. This interval, which must be the same on all routers
on a shared network, is advertised in the hello interval field in
the hello packet. By default, the router sends hello packets every
10 seconds.
To modify how often the router sends hello packets out of an
interface, include the hello-interval statement:
hello-interval seconds;
For a list of hierarchy levels at which you can configure this
statement, see the statement summary section for this statement.
On nonbroadcast networks, the router sends hello packets every 120
seconds until active neighbors are detected by default. This
interval is long enough to minimize the bandwidth required on slow
WAN links. To modify this interval, include the poll-interval
statement: poll-interval seconds;
+-------------------------------------------------------------+
|NOTE: The poll-interval statement is valid for OSPFv2 only. |
+-------------------------------------------------------------+
For a list of hierarchy levels at which you can configure this
statement, see the statement summary section for this statement.
Once the router detects an active neighbor, the hello packet
interval changes from the time specified in the poll-interval time
statement to the specified in the hello-interval statement.
After you’ve learned what a certain command accomplishes and when you should use it, you can view the actual syntax and possible options using the help reference
command. It’s similar to the manual command seen on other operating systems:
[edit]
doug@Hops#help reference ospf hello-interval
hello-interval
Syntax
hello-interval seconds;
Hierarchy Level
[edit logical-routers logical-router-name protocols ospf area area-id
peer-interface
interface-name],
[edit logical-routers logical-router-name protocols (ospf | ospf3) area
area-id
interface interface-name],
[edit logical-routers logical-router-name protocols (ospf | ospf3) area
area-id virtual-link],
[edit logical-routers logical-router-name routing-instances
routing-instance-name
protocols (ospf | ospf3) area area-id interface interface-name],
[edit logical-routers logical-router-name routing-instances
routing-instance-name
protocols (ospf | ospf3) area area-id virtual-link],
[edit protocols ospf area area-id peer-interface interface-name],
[edit protocols (ospf | ospf3) area area-id interface interface-name],
[edit protocols (ospf | ospf3) area area-id virtual-link],
[edit routing-instances routing-instance-name protocols (ospf | ospf3)
area area-id
interface interface-name],
[edit routing-instances routing-instance-name protocols (ospf | ospf3)
area area-id
virtual-link]
Release Information
Statement introduced before JUNOS Release 7.4.
Description
Specify how often the router sends hello packets out the interface.
The hello interval must be the same for all routers on a shared
logical IP network.
Options
seconds--Time between hello packets, in seconds.
Range: 1 through 255 seconds
Default: 10 seconds; 120 seconds (nonbroadcast networks)
Usage Guidelines
See "Modifying the Hello Interval".
Required Privilege Level
routing--To view this statement in the configuration.
routing-control--To add this statement to the configuration.
See Also
dead-interval
Get JUNOS Enterprise Routing now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.