作曲・指導・C言語・Linux

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。

MTU Changer

MTUを任意の値で連続して増減、あるいは任意の値が代入できます。目的は、ネットワークを利用したゲームで発生するラグとMTU値の関係性をチェックするものです。

環境 :LMDE 4

実行画面

実行には、管理者権限(sudo)が必要になります。引数により二つのモードがあります。一つは、'q'を入力するまで設定した値の間隔で増減を繰り返すもの。もう一つは、任意の値を代入するものです。引数を設定せずに実行すると、簡単な使い方が表示されます。

$ sudo ./mtu_changer.sh 
$ sudo ./mtu_changer [+|-|=] [value]
$ sudo ./mtu_changer.sh - 30
The Current mtu is 1500.
decliment by 30. OK: any key | Quit : q
The Current mtu is 1500
The Current mtu is 1470
The Current mtu is 1440
The Current mtu is 1410
The Current mtu is 1380
$ sudo ./mtu_changer.sh + 75
The Current mtu is 1380.
decliment by 75. OK: any key | Quit : q
The Current mtu is 1455
The Current mtu is 1530
The Current mtu is 1605
$ sudo ./mtu_changer.sh = 1500
The Current mtu is 1605.
assignment by 1500. OK: any key | Quit : q
The Current mtu is 1500

mtu_changerのコード

GNU/Linux用に書いてあります。macOSやBSD/UNIXでは動かすのは修正が必要になります。定数のdeclare -r IF=は、筆者の環境では自動で取得できましたが、他環境では正常に動作するか分かりません。動作しない場合は、定数IFの1行上でコメントアウトしてあるように、インターフェース名を直接記述してください。

#!/bin/bash

#declare -r IF=wlp1s0  #Any Interface name
declare -r IF=$(ifconfig | grep 'UP,BROADCAST' | grep -o '^.*:') #Any Interface name
declare -i mtu=$(ifconfig | grep "${IF%:}" | grep -o '[0-9]*$') #Current mtu
declare -r SIGN=$1  #Any sign (+|-|=)
declare -ri STEP=$2  #Any value

fn_main()
{
  case $1 in
    +)
      fn_calc_mtu incliment
      ;;
    -)
      fn_calc_mtu decliment
      ;;
    =)
      fn_calc_mtu assignment
      ;;
    *)
      echo "The current mtu is $mtu."
      echo "\$ sudo $0 [+|-|=] [value]"
      ;;
  esac
}

fn_calc_mtu()
{
  show_argname $1

  while :
  do
    case $1 in
      incliment)
        ((mtu += STEP))
        fn_set_mtu
        waiting_input
        ;;
      decliment)
        ((mtu -= STEP))
        fn_set_mtu
        waiting_input
        ;;
      assignment)
        ((mtu = STEP))
        fn_set_mtu
        exit 0
        ;;
    esac
  done
}

fn_show_argname()
{
  echo "The current mtu is $mtu."
  echo "$1 by $STEP. OK: any key | Quit: q"
  fn_waiting_input
}

fn_set_mtu()
{
  ifconfig $IF mtu $mtu
  echo "The current mtu is $mtu"
}

fn_waiting_input()
{
  read -sn 1 ans
  if [[ "$ans" = [Qq] ]]; then
    exit 0 
  fi
}

fn_main $1

# HASE Kazuaki <https://psipsina.jp>

更新情報

  • 作成日:2020-07-03
  • 作成日:2022-05-02