Jump to content

Использование SNMP из entware, совместно с прошивочным


Recommended Posts

Благодаря разработчикам у нас есть возможность не городя огород использовать SNMP из прошивки. Но как выяснилось, часть инфы там получить нельзя. Поэтому можно поставить snmp из пакетов и получить недостающие данные.

В данном примере это загрузка CPU, памяти, памяти в % и tun интерфейса от OVPN.

Безымянный.jpg

Для этого нам понадобится установленный entware и snmpd-static, ndmq.

Подключаемся к кинетику по SSH.

Вводим в консоли:

opkg update
opkg upgrade
opkg install snmpd-static

Проверяем наличие ndmq:

~ # ndmq -p "show system" -x
<response>
    <hostname>border</hostname>
    <domainname>WORKGROUP</domainname>
    <cpuload>1</cpuload>
    <memory>53592/262144</memory>
    <swap>0/0</swap>
    <memtotal>262144</memtotal>
    <memfree>72784</memfree>
    <membuffers>104560</membuffers>
    <memcache>31208</memcache>
    <swaptotal>0</swaptotal>
    <swapfree>0</swapfree>
    <uptime>86688</uptime>
    <prompt>(config)</prompt>
</response>
~ #

Если видим данные все ОК, если нет то:

opkg install ndmq

После успешной установки идем в "/opt/etc"

Ищем каталог "snmp", если его нет создаем и помещаем в него 2 файла из архива из папки "snmp" или можно скопировать всю папку. Файл "S60snmpd" кладем в "/opt/etc/init.d".

После того как все скопировали в нужные места нужно сделать 2 скрипта исполняемыми, один в каталоге "/opt/etc/snmp/system.sh", это скрипт получения инфы из прошивки с помощью ndmq и второй "/opt/etc/init.d/S60snmpd"

chmod +x /opt/etc/init.d/S60snmpd
chmod +x /opt/etc/snmp/system.sh

После этого запускаем демона snmp

/opt/etc/init.d/S60snmpd start

и проверяем, что он работает

~ # ps | grep snmp
  426 root      5204 S    snmpd
  438 root      4000 S    /usr/sbin/mini_snmpd -n -s -D Keenetic Ultra II (NDMS v2.08(AAUX.2)A7) -c xxx
30230 root      1632 S    grep snmp
~ #

Видим, что все хорошо.

Проверяем вывод snmp:

snmpwalk -v2c -c public IP_КИНЕТИКА:10161 .1.3.6.1.4.1.2021.8.1.101.1

На выходе должно быть:

UCD-SNMP-MIB::extOutput.1 = STRING: TOTAL:262144 USAGE:52124 PERCENT:19 CPU:1

TOTAL:262144  - всего памяти

USAGE:52124  - используется памяти

PERCENT:19  - процент используемой памяти

CPU:1 - загрузка CPU

Архивчик:

 

Что-то получилось как-то сложно.....:shock:

Дальше у меня это в cacti распарсивается PHP скриптом, но это другая история.

В конфигурационном файле указан протокол udp и порт 10161.

Если не нужны графики по CPU и памяти то статистику того же tun интерфейс вы свободно получите.

Если слишком сложно то лучше инструкцию удалить.

snmp.rar

  • Thanks 5
Link to comment
Share on other sites

~ # opkg install snmpd-static
Installing snmpd-static (5.4.4-2a) to root...
Downloading http://pkg.entware-keenetic.ru/binaries/keenle/snmpd-static_5.4.4-2a_keenle.ipk.
Installing libopenssl (1.0.2h-1) to root...
Downloading http://pkg.entware-keenetic.ru/binaries/keenle/libopenssl_1.0.2h-1_keenle.ipk.
Installing zlib (1.2.8-1) to root...
Downloading http://pkg.entware-keenetic.ru/binaries/keenle/zlib_1.2.8-1_keenle.ipk.
Configuring zlib.
Configuring libopenssl.
Configuring snmpd-static.
~ # ndmq -p "show system" -x
<response>
    <hostname>Keenetic</hostname>
    <domainname>WORKGROUP</domainname>
    <cpuload>1</cpuload>
    <memory>32556/131072</memory>
    <swap>12180/614392</swap>
    <memtotal>131072</memtotal>
    <memfree>15508</memfree>
    <membuffers>328</membuffers>
    <memcache>82680</memcache>
    <swaptotal>614392</swaptotal>
    <swapfree>602212</swapfree>
    <uptime>19831</uptime>
    <prompt>(config)</prompt>
</response>
~ # opkg install ndmq
Package ndmq (1.0.2-1) installed in root is up to date.
~ # chmod +x /opt/etc/init.d/S60snmpd
~ # chmod +x /opt/etc/snmp/system.sh
~ # /opt/etc/init.d/S60snmpd start
 Starting snmpd... Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
             failed.
~ # ps | grep snmp
Segmentation fault
~ # /opt/etc/init.d/S60snmpd stop
 Checking snmpd... Segmentation fault
             dead.
~ #

 

Можете подсказать что это за ошибка Segmentation fault? Можно ли её исправить? Такая же ошибка у меня возникает при попытке установки пакета aMule.

Link to comment
Share on other sites

Не знаю чем вам и помочь. У меня на Ultra 1 такой ошибки не возникает. 

Может кто ещё чего подскажет.

Попробуйте вместо  snmpd-static просто  snmpd.

Edited by dexter
Link to comment
Share on other sites

Скрытый текст

~ # cat /proc/version 
Linux version 2.6.22.15 (developers@ndmsystems.com) (gcc version 4.3.4 (embtoolkit-1.7.0) ) #1 Mon Sep 12 21:10:29 MSK 2016
~ # 
~ # ndmq -p "show version" -P device
Keenetic Giga II
~ # 
~ # ndmq -p "show version" -P release
v2.06(AAFS.3)C1
~ #
~ # opkg list-installed *snmp*
libnetsnmp - 5.4.4-2a
snmpd-static - 5.4.4-2a
~ # 
~ # snmpd -v

NET-SNMP version:  5.4.4
Web:               http://www.net-snmp.org/
Email:             net-snmp-coders@lists.sourceforge.net

~ # 
~ # /opt/etc/init.d/S60snmpd restart
 Shutting down snmpd...              done. 
 Starting snmpd...              done. 
~ # 


 

  • Thanks 1
Link to comment
Share on other sites

23 часа назад, TheBB сказал:
  Показать содержимое


~ # cat /proc/version 
Linux version 2.6.22.15 (developers@ndmsystems.com) (gcc version 4.3.4 (embtoolkit-1.7.0) ) #1 Mon Sep 12 21:10:29 MSK 2016
~ # 
~ # ndmq -p "show version" -P device
Keenetic Giga II
~ # 
~ # ndmq -p "show version" -P release
v2.06(AAFS.3)C1
~ #
~ # opkg list-installed *snmp*
libnetsnmp - 5.4.4-2a
snmpd-static - 5.4.4-2a
~ # 
~ # snmpd -v

NET-SNMP version:  5.4.4
Web:               http://www.net-snmp.org/
Email:             net-snmp-coders@lists.sourceforge.net

~ # 
~ # /opt/etc/init.d/S60snmpd restart
 Shutting down snmpd...              done. 
 Starting snmpd...              done. 
~ # 

 

 

Спасибо за помощь. Отсутствовал пакет libnetsnmp. Установил этот пакет, но это не помогло, ошибки шли по прежнему. Тогда отформатировал раздел винчестера с установленым Entware, снова всё сделал по Вашей инструкции, установив отдельно пакет libnetsnmp и всё заработало.

Но как я понял без установки и настройки cacti никаких графиков видно не будет?

Link to comment
Share on other sites

Без  cacti или подобного ничего не увидите. cacti templates могу выложить архивчиком, как и php скрипт.

Edited by dexter
Link to comment
Share on other sites

16 часов назад, dexter сказал:

Без  cacti или подобного ничего не увидите. cacti templates могу выложить архивчиком, как и php скрипт.

Выложите пожалуйсто все недостающие файлы, а также инструкцию в какие папки нужно закинуть эти файлы и какой коммандой запустить вывод этих графиков. Ещё не понятно каким образом можно будет увидеть эти графики, правильно ли я понимаю что графики будут открываться в отдельном окне браузера, а открыть это окно можно будет введя IP роутера и определённый порт? Заранее спасибо за ответы.

Edited by beowulf0208
Link to comment
Share on other sites

На кинетике не получится. Я делал на Ultra 2, ставив Debian на флешку и в момент запросов sql загрузка CPU было около 100%. На  Keenetic II  вряд ли получится установить.

  • Thanks 1
Link to comment
Share on other sites

16 минут назад, dexter сказал:

На кинетике не получится. Я делал на Ultra 2, ставив Debian на флешку и в момент запросов sql загрузка CPU было около 100%. На  Keenetic II  вряд ли получится установить.

Спасибо за совет, тогда не буду пытаться это сделать.

Link to comment
Share on other sites

В 19.09.2016 в 13:30, dexter сказал:

Без  cacti или подобного ничего не увидите. cacti templates могу выложить архивчиком, как и php скрипт.

Это вы зря, есть еще примеры другие и даже в этой теме.
 

Link to comment
Share on other sites

В данной теме уже были примеры и графики

Рабочий Windows на любом ПК и приложение PRTG (кол-во счетчиков большая куча, только в trial есть ограничения - на одновременное использование из большого выбора определенного кол-ва после 30 дней, но это решаемо). Для домашнего пользователя и его потребностей достаточно + минимальное что нужно сделать на роутере и на ПК + рисунок (карта) где что стоит созданная самим пользователем и ведение лога с посылкой предупреждений куда угодно.

Для подсчета же только трафика наверное достаточно создать скрипт для работы с contrack и сохранение информации их него например в файле
 

...
/tmp # grep 192.168.130.2 /proc/net/arp | awk 'BEGIN { printf "{arp::"} { printf "'\''%s'\'','\''%s'\'',",$1,$4; } END { print "'\''-'\''}"}' >> /tmp/traffic
.dat
/tmp # awk 'BEGIN { printf "{hosts::"} { printf "'\''%s'\'','\''%s'\'',",$1,$2; } END { print "'\''<% show_wanipinfo(); %>'\''}"}' /tmp/hosts >> /tmp/traffic
.dat
/tmp # awk 'BEGIN { printf "{ip_conntrack::"} { gsub(/(src|dst|sport|dport|mark)=/, ""); printf "'\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'',%s,",
$1,$1 == "tcp" ? $5 : $4,$1 == "tcp" ? $7 : $6,$1 == "tcp" ? $6 : $5,$1 == "tcp" ? $8 : $7,$(NF-1); } END { print "'\''-'\''}"}' /proc/net/ip_conntrack >> /t
mp/traffic.dat
...

Далее обработать данный файл для вывода информации в WEB страницы.

Вопрос только с корректностью данных значений при использовании на чипах Mediatek и их аппаратной обработке PPPoE

Link to comment
Share on other sites

1 час назад, vasek00 сказал:

В данной теме уже были примеры и графики

Рабочий Windows на любом ПК и приложение PRTG (кол-во счетчиков большая куча, только в trial есть ограничения - на одновременное использование из большого выбора определенного кол-ва после 30 дней, но это решаемо). Для домашнего пользователя и его потребностей достаточно + минимальное что нужно сделать на роутере и на ПК + рисунок (карта) где что стоит созданная самим пользователем и ведение лога с посылкой предупреждений куда угодно.

Для подсчета же только трафика наверное достаточно создать скрипт для работы с contrack и сохранение информации их него например в файле
 


...
/tmp # grep 192.168.130.2 /proc/net/arp | awk 'BEGIN { printf "{arp::"} { printf "'\''%s'\'','\''%s'\'',",$1,$4; } END { print "'\''-'\''}"}' >> /tmp/traffic
.dat
/tmp # awk 'BEGIN { printf "{hosts::"} { printf "'\''%s'\'','\''%s'\'',",$1,$2; } END { print "'\''<% show_wanipinfo(); %>'\''}"}' /tmp/hosts >> /tmp/traffic
.dat
/tmp # awk 'BEGIN { printf "{ip_conntrack::"} { gsub(/(src|dst|sport|dport|mark)=/, ""); printf "'\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'',%s,",
$1,$1 == "tcp" ? $5 : $4,$1 == "tcp" ? $7 : $6,$1 == "tcp" ? $6 : $5,$1 == "tcp" ? $8 : $7,$(NF-1); } END { print "'\''-'\''}"}' /proc/net/ip_conntrack >> /t
mp/traffic.dat
...

Далее обработать данный файл для вывода информации в WEB страницы.

Вопрос только с корректностью данных значений при использовании на чипах Mediatek и их аппаратной обработке PPPoE

В случае с аппаратным PPPoE записи в conntrack корректны, только счетчики содержат в себе мусор.

Link to comment
Share on other sites

1 час назад, Le ecureuil сказал:

В случае с аппаратным PPPoE записи в conntrack корректны, только счетчики содержат в себе мусор.

ОК - СПС

Link to comment
Share on other sites

  • 5 years later...

Здравия!

До этого несколько раз ставил этот пакет и всё было нормально. Определил, что теперь вместо

opkg install snmpd-static

нужно писать

opkg install snmpd

А вот теперь при попытке

opkg install ndmq

Пишет

~ # opkg install ndmq
Unknown package 'ndmq'.
Collected errors:
 * opkg_install_cmd: Cannot install package ndmq.

Ну и соответственно дальше ничего не работает. Может кто нибудь подсказать, что нужно ставить?

 

 

Link to comment
Share on other sites

В 09.12.2021 в 20:19, feoser сказал:

Ну и соответственно дальше ничего не работает. Может кто нибудь подсказать, что нужно ставить?

Переходить/переписывать на RCI или ставить из архива (напр., для mipsel - http://bin.entware.net/mipselsf-k3.4/keenetic/archive/). Первым ставить "libndm", вторым "ndmq".

  • Thanks 2
Link to comment
Share on other sites

Спасибо за ответ. Самое, что интересное, решил выполнить все действия без установки ndmq и о чудо и без него PRTG прекрасно всё забирает.

Link to comment
Share on other sites

  • 1 year later...

4.0 Beta 0.1

SNMP для ARM.

/usr/lib # snmpd -c /opt/etc/snmp/snmpd.conf
snmpd: /usr/lib/libcrypto.so.1.1: version `OPENSSL_1_1_0' not found (required by /opt/lib/libnetsnmp.so.40)
/usr/lib # 
/usr/lib # ls -l | grep libnetsnmp
/usr/lib # ls -l | grep ssl
-rwxr-xr-x    1 root     root        503016 May  6 21:22 libssl.so.3
drwxr-xr-x    2 root     root            32 May  6 21:22 ossl-modules
/usr/lib # ls -l | grep crypto
lrwxrwxrwx    1 root     root            14 May  6 21:22 libcrypto.so -> libcrypto.so.3
lrwxrwxrwx    1 root     root            14 May  6 21:22 libcrypto.so.1 -> libcrypto.so.3
lrwxrwxrwx    1 root     root            14 May  6 21:22 libcrypto.so.1.1 -> libcrypto.so.3
-rwxr-xr-x    1 root     root       3248688 May  6 21:22 libcrypto.so.3
/usr/lib # opkg list-installed *snmp*
libnetsnmp - 5.9.1-1
mini_snmpd - 1.6-3
snmp-mibs - 5.9.1-1
snmp-utils - 5.9.1-1
snmpd - 5.9.1-1
snmptrapd - 5.9.1-1
/usr/lib #

 

Link to comment
Share on other sites

43 минуты назад, Александр Рыжов сказал:

@vasek00, ldd `which snmpd`

 

Скрытый текст
/opt/sbin # ldd snmpd
./snmpd: /usr/lib/libcrypto.so.1.1: version `OPENSSL_1_1_0' not found (required by /opt/lib/libnetsnmp.so.40)
        linux-vdso.so.1 (0x0000007f933f0000)
        libnetsnmpagent.so.40 => /opt/lib/libnetsnmpagent.so.40 (0x0000007f93368000)
        libnetsnmpmibs.so.40 => /opt/lib/libnetsnmpmibs.so.40 (0x0000007f93260000)
        libnetsnmp.so.40 => /opt/lib/libnetsnmp.so.40 (0x0000007f931c1000)
        libpci.so.3 => /opt/lib/libpci.so.3 (0x0000007f931a3000)
        libdl.so.2 => /opt/lib/libdl.so.2 (0x0000007f9318f000)
        libpcre.so.1 => /opt/lib/libpcre.so.1 (0x0000007f93141000)
        libnl-3.so.200 => /opt/lib/libnl-3.so.200 (0x0000007f93112000)
        libc.so.6 => /opt/lib/libc.so.6 (0x0000007f92fa2000)
        libm.so.6 => /opt/lib/libm.so.6 (0x0000007f92ede000)
        libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1 (0x0000007f92bb3000)
        libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x0000007f92b8e000)
        libresolv.so.2 => /opt/lib/libresolv.so.2 (0x0000007f92b67000)
        /opt/lib/ld-linux-aarch64.so.1 (0x0000007f933c2000)
        libpthread.so.0 => /opt/lib/libpthread.so.0 (0x0000007f92b39000)
        libssp.so.0 => /opt/lib/libssp.so.0 (0x0000007f92b26000)
        libc.so => /usr/lib/libc.so (0x0000007f92a74000)
/opt/sbin #
/opt/sbin # ldd `which snmpget`|grep snmp
/opt/bin/snmpget: /usr/lib/libcrypto.so.1.1: version `OPENSSL_1_1_0' not found (required by /opt/lib/libnetsnmp.so.40)
        libnetsnmp.so.40 => /opt/lib/libnetsnmp.so.40 (0x0000007f8b970000)
/opt/sbin #
/opt/sbin # ldd `which snmpd`|grep snmp
/opt/sbin/snmpd: /usr/lib/libcrypto.so.1.1: version `OPENSSL_1_1_0' not found (required by /opt/lib/libnetsnmp.so.40)
        libnetsnmpagent.so.40 => /opt/lib/libnetsnmpagent.so.40 (0x0000007f7f4bc000)
        libnetsnmpmibs.so.40 => /opt/lib/libnetsnmpmibs.so.40 (0x0000007f7f3b4000)
        libnetsnmp.so.40 => /opt/lib/libnetsnmp.so.40 (0x0000007f7f315000)
/opt/sbin #
/opt/sbin # cd /opt/lib
/opt/lib # ls -l | grep snmp
lrwxrwxrwx    1 root     root            20 Oct 28  2022 libnetsnmp.so.40 -> libnetsnmp.so.40.1.0
-rwxr-xr-x    1 root     root        566432 Aug  4  2022 libnetsnmp.so.40.1.0
lrwxrwxrwx    1 root     root            25 Oct 28  2022 libnetsnmpagent.so.40 -> libnetsnmpagent.so.40.1.0
-rwxr-xr-x    1 root     root        300960 Aug  4  2022 libnetsnmpagent.so.40.1.0
lrwxrwxrwx    1 root     root            27 Oct 28  2022 libnetsnmphelpers.so.40 -> libnetsnmphelpers.so.40.1.0
-rwxr-xr-x    1 root     root          5960 Aug  4  2022 libnetsnmphelpers.so.40.1.0
lrwxrwxrwx    1 root     root            24 Oct 28  2022 libnetsnmpmibs.so.40 -> libnetsnmpmibs.so.40.1.0
-rwxr-xr-x    1 root     root        429744 Aug  4  2022 libnetsnmpmibs.so.40.1.0
lrwxrwxrwx    1 root     root            25 May 11 11:09 libnetsnmptrapd.so.40 -> libnetsnmptrapd.so.40.1.0
-rwxr-xr-x    1 root     root         34728 Aug  4  2022 libnetsnmptrapd.so.40.1.0
drwx------    3 root     root          1024 Jul 30  2022 snmp
/opt/lib #
/opt/lib # ls -l | grep crypto
-rw-r--r--    1 root     root       4475144 Mar  1 05:44 libcrypto.so.3
lrwxrwxrwx    1 root     root            18 May 11 11:19 libcryptopp.so -> libcryptopp.so.5.6
-rw-r--r--    1 root     root       3629184 Jul  7  2021 libcryptopp.so.5.6
-rw-r--r--    1 root     root        391104 Feb 27 12:55 libmbedcrypto.so.2.28.2
lrwxrwxrwx    1 root     root            23 Mar 26 10:29 libmbedcrypto.so.7 -> libmbedcrypto.so.2.28.2
/opt/lib #

 

 

Edited by vasek00
Link to comment
Share on other sites

1 час назад, Александр Рыжов сказал:

Похоже на это.

opkg --force-reinstall install libnetsnmp

 

Помогло но только вот так

opkg --force-reinstall install libnetsnmp
Removing package libnetsnmp from root...
Installing libnetsnmp (5.9.1-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/libnetsnmp_5.9.1-1_aarch64-3.10.ipk
Configuring libnetsnmp.

opkg --force-reinstall install snmpd
Removing package snmpd from root...
Installing snmpd (5.9.1-1) to root...
Downloading http://bin.entware.net/aarch64-k3.10/snmpd_5.9.1-1_aarch64-3.10.ipk
Configuring snmpd.

lsof -p 7047
COMMAND  PID USER   FD      TYPE  DEVICE SIZE/OFF    NODE NAME
snmpd   7047 root  cwd       DIR    31,7      227    1974 /
snmpd   7047 root  rtd       DIR    31,7      227    1974 /
snmpd   7047 root  txt       REG     8,3    22536  663630 /opt/sbin/snmpd
snmpd   7047 root  mem       REG     8,3  2931760  389124 /opt/usr/lib/locale/locale-archive
snmpd   7047 root  mem       REG     8,3   105168  237582 /opt/lib/libpthread-2.27.so
snmpd   7047 root  mem       REG     8,3    84160  237604 /opt/lib/libresolv-2.27.so
snmpd   7047 root  mem       REG     8,3    83960  237612 /opt/lib/libgcc_s.so.1
snmpd   7047 root  mem       REG     8,3  4475144  237983 /opt/lib/libcrypto.so.3
snmpd   7047 root  mem       REG     8,3   735216  237615 /opt/lib/libm-2.27.so
snmpd   7047 root  mem       REG     8,3  1431816  237614 /opt/lib/libc-2.27.so
snmpd   7047 root  mem       REG     8,3   124920  237748 /opt/lib/libnl-3.so.200.26.0
snmpd   7047 root  mem       REG     8,3   251848  237986 /opt/lib/libpcre.so.1.2.13
snmpd   7047 root  mem       REG     8,3    14312  237576 /opt/lib/libdl-2.27.so
snmpd   7047 root  mem       REG     8,3    55584  237756 /opt/lib/libpci.so.3.8.0
snmpd   7047 root  mem       REG     8,3   566432  237758 /opt/lib/libnetsnmp.so.40.1.0
snmpd   7047 root  mem       REG     8,3   429744  237764 /opt/lib/libnetsnmpmibs.so.40.1.0
snmpd   7047 root  mem       REG     8,3   300960  237760 /opt/lib/libnetsnmpagent.so.40.1.0
snmpd   7047 root  mem       REG     8,3   136952  237613 /opt/lib/ld-2.27.so
snmpd   7047 root    0u      CHR     1,3      0t0      58 /dev/null
snmpd   7047 root    1u      CHR     1,3      0t0      58 /dev/null
snmpd   7047 root    2u      CHR     1,3      0t0      58 /dev/null
snmpd   7047 root    3w      REG     8,3       71  684072 /opt/var/log/snmpd.log
snmpd   7047 root    4r     FIFO     0,8      0t0 2706489 pipe
snmpd   7047 root    5w     FIFO     0,8      0t0 2706489 pipe
snmpd   7047 root    6u  netlink              0t0 2706492 ROUTE
snmpd   7047 root    7u     IPv4 2706911      0t0     UDP *:snmp 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...