configuration training ~ lua script ~

31
Yamaha Router Configuration Training ~ Lua script ~

Upload: ngotruc

Post on 03-Jan-2017

252 views

Category:

Documents


4 download

TRANSCRIPT

Yamaha Router Configuration Training

~ Lua script ~

© Yamaha Corporation

Lua script

Simple and powerful scripting language. - http://www.lua.org Lua script interpreter is embedded in Yamaha router. With Yamaha router … - Monitor the system log and change the configuration. - Send e-mail to report the network status . - Change the routing policy dynamically. - Shutdown the switch’s port that connect to malicious computer. - Write a simple network server/client with LuaSocket library.

2

© Yamaha Corporation

Topology

RTX810

Console cable (Tera Term)

LAN cable

3

© Yamaha Corporation 4

Hello, world!

Make a script that print out the string “Hello, world!”.

1. Start the memo. 2. Write “ print (“Hello, world!”) “. 3. Create a new line at the bottom of file. 4. Save the memo as “helloworld.lua” with ascii code.

Challenge

© Yamaha Corporation 5 5

USB Memory settings

1. Save helloworld.lua to USB memory. In this case, save to root directory.

2. Connect the USB Memory to RTX810’s USB port.

© Yamaha Corporation

Execute Lua script

6

Sample:

・helloworld.lua is automatically compiled and execute. ・script output is displayed on console.

Lua <LUA_SCRIPT>

Command

© Yamaha Corporation

Other method of executing Lua 1. Transfer the Lua script file to router by using TFTP.

1-1. Set “tftp host any” on router console. 1-2. Transfer the Lua script to router.

2. Execute “ Lua <LUA_SCRIPT>” on router console.

7

© Yamaha Corporation

Other method of executing Lua

・calculate the number. ・calculate negative number. ・decimal number can not be calculate.

Lua –e ‘<LUA_SCRIPT>’

Command

Sample:

8

© Yamaha Corporation

Test case (variable)

Number

a = 12 b = 2 a = a * b print(a)

String

str1 = “I like “ str2 = “music.” str1 = str1 .. str2 print(str1) Addition of strings

9

© Yamaha Corporation

Test case (for loop)

for i=1, 10 do print (i, “Hello, world!”) end

Check the result of following script.

10

© Yamaha Corporation

Lua status check

・Use “show status lua”. ・Check Compile error.

In case of Lua script was not executed correctly …

11

© Yamaha Corporation

Training1

# lua /double.lua 1 1 2 4 3 9 4 16 ・・・ 10 100

Result for i = 0, 10 do print (i, i * i) end

Example i = 0 while i < 10 do print (i, i * i) i = i + 1 end

Example

Make a Lua script that calculate n2 (n = 1~10) Challenge

12

© Yamaha Corporation

Training2

# lua /factorial.lua 1! = 1 2! = 2 3! = 6 4! = 24 ・・・ 10! = 3628800

Result tostring () … connect the string and number. Example (I am 30 years old.) ------------------------------------------------------------ age = 30 print (“I am ” .. tostring (age) .. “ years old”) ------------------------------------------------------------

Hint

factorial = 1 for i = 1, 10 do factorial = factorial * i print (tostring(i) .. “! = “ .. tostring(factorial)) end

Example

Make a Lua script that calculate n! (n = 1~10) Challenge

13

© Yamaha Corporation

Execute router command

ARG1 … true or false ARG2 … output of COMMAND ARG1, ARG2 = rt.command (<COMMAND>)

Lua script library

14

© Yamaha Corporation

Execute router command Example

In case of ping is available, rtn is true.

In case of ping is not available, rtn is false.

15

© Yamaha Corporation

Training 3

Make a Lua script that display the status of all lan interface. Hint: use for loop and “show status lanN” command.

Challenge

16

© Yamaha Corporation

Training 3

cmd = “show status lan” for i = 1, 2 do cmd_n = cmd .. tostring (i) rtn, str = rt.command(cmd_n) if rtn then print (cmd_n .. “ output:¥r¥n” .. str) else print (“Command error:” .. cmd_n) end end

Example code

・ ¥r¥n means line feed.

17

© Yamaha Corporation

Terminate Lua In case of Lua script become an infinite loop process …

while true do i = 1 end

Example Infinite loop

terminate lua <LUA_TASK_ID> terminate lua file ‘<LUA_SCRIPT>’

Command

18

© Yamaha Corporation

Send E-mail

・Make table for mail. ※ If necessary, set ID & password. smtp_auth_name = ID smtp_auth_password = password ・Check the result.

rt.mail (<TABLE>)

Lua script library

Sample:

19

© Yamaha Corporation

Training 4

Make a Lua script that send e-mail to you. E-mail title is command. E-mail contents is the output of “show environment”. Hint: Set the string to table factor. mail_tbl.subject = NAME mail_tbl.text = STRING

Challenge

20

© Yamaha Corporation

Training 4

・Set the output of command. ・Set the command to subject. ・In case of fail to send email, error output print to console.

cmd = “show environment” mail_tbl = { smtp_address = “mail.test.test”, from = [email protected], to = [email protected] } rtn, str = rt.command(cmd) if rtn then mail_tbl.text = str mail_tbl.subject = cmd if not rt.mail(mail_tbl) then print(“Send mail failure”) end end

Example

21

© Yamaha Corporation

Execute command regularly

・Make a Lua script that show the configuration at 30 second intervals. ・Delay the process of Lua script until after the specified time.

rt.sleep (<SLEEP_TIME>)

Lua script library

Sample:

22

© Yamaha Corporation

Function definition

・Make a function that execute ping. ・Delay the process of Lua script until after the specified time.

Sample:

Make a Lua script that execute ping to www.example.com at 30 second intervals.

Challenge

23

© Yamaha Corporation

Take out the string

string.match(<STRING>, <PATTERN>) Search the <PATTERN> from <STRING>

Lua script library

Sample:

Make a Lua script that print the number of dhcp leased addresses. Challenge

・Search “Leased: “ and print the number that following the string “Leased: “.

24

© Yamaha Corporation

Training 5

Make a Lua script that send e-mail to you at 30 second intervals. E-mail title is “CPU utilization”. E-mail contents is “Current CPU utilization is ○○%.” Hint: For Getting the number of CPU utilization, string.match (str, “CPU:%s+(%d+)%%”)

Challenge

25

© Yamaha Corporation

Training 5

-- execute command and return result function exec_cmd(cmd) rtn, str = rt.command (cmd) if rtn and str then return true, str else return false end end mail_tbl = { subject = "CPU utilization" ・・・ (omission) } cmd = "show environment"

Example interval = 30 output = "Current CPU utilization is " while true do rtn, str = exec_cmd (cmd) if rtn then mail_tbl.text = output .. string.match(str, "CPU:%s+(%d+)%%") .. "%" if not rt.mail(mail_tbl) then print ("Fail") end end rt.sleep (interval) end

Continuation of Example

26

© Yamaha Corporation

Get number from system log

rt.syslogwatch (<PATTERN>) Search the <PATTERN> from router’s system log.

Lua script library

Sample:

Make a Lua script that print the information of LAN linkup. Challenge

・Monitor the system log and detect the specified log, move to next process. ・Get the port number from detected system log.

27

© Yamaha Corporation

Training 6

Make a Lua script that output the information of LAN2 linkup and linkdown to system log. format : “LAN2 interface linked up/down” In default, LAN2 linked up. Hint: The system log that you should detect. - linkup … LAN2: link up - linkdown … LAN2: link down Use rt.syslog(<TYPE>, <TEXT>) to output the string to system log.

Challenge

28

© Yamaha Corporation

Training 6 Example

Pattern = “LAN2: link” While true do rtn = rt.syslogwatch (pattern .. “down”) if rtn then rt.syslog (“info”, “LAN2 interface linked down”) end rtn = rt.syslogwatch (pattern .. “up”) if rtn then rt.syslog (“info”, “LAN2 interface linked up”) end end

29

© Yamaha Corporation

Training 7

・Send E-mail to you at 60 second intervals. ・E-mail title is router’s current time, format is YEAR/MONTH/DATE XX:XX:XX. ・E-mail contents are following ----------------------------- CPU: XX% (5sec) CPU: XX% (1min) CPU: XX% (5min) Memory: XX% used -----------------------------

Make a Lua script that …

Procedure

1. Get the information about current time and CPU from “show environment”. 2. Make a content from the information.

Hint : Use string.find() and string.sub. ※ But you may use other functions. 3. Send E-mail to yourself.

30

© Yamaha Corporation

Training 8

Internet

・If the PPPoE is disconnected, use the route through USB 3G to access internet and output the log “Change the route to mobile”. ・If the PPPoE is connected, use the route through PPPoE to access internet and output the log “Change the route to PPPoE”.

Make a Lua script that …

PPPoE (LAN2)

USB

3G

LAN1

192.168.100.0/24

Procedure

1. Make a environment to access internet with PPPoE and USB 3G.

2. Monitor the following log - “PPPOE[01] PPPoE Connect” - “PPPOE[01] Disconnected”

3. Change the route “ip route default gateway **”.

4. Check the connectivity by using ping from PC.

31