Coder Social home page Coder Social logo

opensolutions / oss_snmp Goto Github PK

View Code? Open in Web Editor NEW
106.0 21.0 57.0 1.51 MB

A PHP SNMP library for people who hate SNMP, MIBs and OIDs!

Home Page: https://github.com/opensolutions/OSS_SNMP/wiki

License: Other

Shell 0.02% PHP 99.93% HTML 0.05%

oss_snmp's Introduction

OSS_SNMP

A PHP SNMP Library for People Who HATE SNMP, MIBs and OIDs!

I (Barry O'Donovan) hate SNMP! But I have to use it on a daily basis with my company, Open Solutions and our customers.

Don't get me wrong, it's an essential tool in the trade of network engineering but it's also a serious PITA. Finding MIBs, OIBs, making them work, translating them, cross-vendor translations, etc, blah, blah. And then, when you do find what you need, you'll have forgotten it months later when you need it again.

Anyway, while trying to create some automatic L2 topology graphing tools (via Cisco/Foundry Discovery Protocol for example) and also some per VLAN RSTP tools to show port states, I started writing this library which has turned out to be very useful. It is presented here in the hope that the wider network engineering community will find it useful and also contribute back MIBs.

Documentation

Please see the wiki.

Example Usage

First, we need to instantiate an SNMP object with a hostname / IP address and a community string:

$ciscosw = new \OSS_SNMP\SNMP( $ip, $community );

Assuming the above is a standard Cisco switch, let's say I want to get an associate array of VLAN names indexed by the VLAN ids:

print_r( $ciscosw->useCisco_VTP()->vlanNames() );

This yields something like the following:

Array
(
    [1] => default
    [2] => mgmt
    [100] => cust-widgets
    [1002] => fddi-default
    ...
)

It really is that easy. As another example, if you wanted to get the system contact:

echo $ciscosw->useSystem()->contact();

License

This software library is released under the New BSD License (also known as the Modified BSD License). See the LICENSE file or the header of all other files for the full text.

MIBS - The Bad News... with some Good News

The, what I'm calling, MIBs are defined in OSS_SNMP/MIBS and these define the functionality as per the examples above.

There's only a handful of MIBs currently defined - essentially what I've needed so far for other projects.

But it's really easy to add your own. And please send me a pull request for those.

For the MIBs I've written, Iface (MIBS/Iface.php) is fully complete as an example to help future contributors. But there's some really useful functionality in the others. For example the Cisco/CDP MIB can discover your entire L2 network topology recursively. Another project we've released, NOCtools, give concreate examples of this with GraphViz.

Supports SNMP v1, v2c and v3. It's read only as, at time of writing, I have no current requirement to set SNMP values via PHP.

Requirements

PHP 5.4 is a requirement. The reason for 5.4 (besides the fact it's long been regarded as stable), is that we can now dereference an array directly from a function call:

$name = $ciscosw->useCisco_VTP()->vlanNames()[ $vlanid ];

rather than the old way:

$vlanNames = $ciscosw->useCisco_VTP()->vlanNames();
$name = $vlanNames[ $vlanid ];

And as most of the defined MIBs walk a given tree, almost all defined functions return an array.

The only other requirement is the php5-snmp library.

Code / phpDoc Documentation

Documentation can be generated from the root directory by executing:

./bin/phpdoc.sh --force

and it will be found under the doc/ directory. There is an online version available here.

oss_snmp's People

Contributors

barryo avatar davehope avatar dowlingw avatar elonhub avatar feinar avatar fooelisa avatar gfokkema avatar heitorganzeli avatar jacques avatar laherre avatar laoheimao avatar nickhilliard avatar nschrenk avatar rfc1036 avatar rowanthorpe avatar sgomez avatar thomas-mangin avatar uixp avatar wilpig avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oss_snmp's Issues

Add Support for Huawei CE6810-48S4Q-LI

Please can support be added for the Entire Huawei CE switch stack

Huawei Versatile Routing Platform Software
VRP (R) software, Version 8.100 (CE6810LI V100R005C10SPC200)
Copyright (C) 2012-2015 Huawei Technologies Co., Ltd.
HUAWEI CE6810-48S4Q-LI uptime is 1497 days, 5 hours, 7 minutes

PHP SNMP extension

Hi,
How can i install PHP SNMP extension on os mac with PHP version 8.1
Best regards

OSS-SNMP issue polling Port Channels on Dell OS9 and OS10

We have an infrastructure using Dell (OS9 and OS10) VXLAN switches (due so 'supply chain' issues).

LAG traffic is not showing up in IXPManager. When I poll I see a space between Port-channel and the integer.

Dell OS9 Switch:
sysObjectID .1.3.6.1.4.1.6027.1.5.2
Description Dell EMC Networking OS..Operating System Version: 2.0..Application Software Version: 9.14(2.4)..Series: Z9100-ON..Copyright (c) 1999-2019 by Dell Inc. All Rights Reserved...Build Time: Fri Nov 8 09:08:12 2019

SNMP ifIndex SNMP ifDescr SNMP ifName SNMP ifAlias SNMP ifSpeed
1258291712 Port-channel 1 Port-channel 1 Hurricane-LAG 10000000000

VS Arista EOS Switch:
1000002 Port-Channel2 Port-Channel2 Hurricane-Electric 200000000000

Cisco Nexus 3064 version 7.0

root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Cisco NX-OS(tm) nxos.7.0.3.I6.2.bin, Software (nxos), Version 7.0(3)I6(2), RELEASE SOFTWARE Copyright (c) 2002-2016 by Cisco Systems, Inc. Compiled 10/17/2017 18:00:00"
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.9.12.3.1.3.1105
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.47.1.1.1.1.11.10
.1.3.6.1.2.1.47.1.1.1.1.11.10 = STRING: "FOC1637R0P3"

Issue Polling Cisco NCS-5500

We see successful queries for teh sysDescr and the sysObjectID and then an error in the Cisco module.

I commented out line 100 and set the variable statically and IXP Manager was able to read all the interfaces.

Here are the return values from the NCS-5500

xxxxx@ixpmgr:/srv/ixpmanager/storage/logs$ snmpget -c XXXXXXX -v 2c xx.xx.xx.xx .1.3.6.1.2.1.1.1.0
iso.3.6.1.2.1.1.1.0 = STRING: "Cisco IOS XR Software (NCS-5500), Version 7.3.2 Copyright (c) 2013-2021 by Cisco Systems, Inc."

xx@ixpmgr:/srv/ixpmanager/storage/logs$ snmpget -c xxxxxxx -v 2c xx.xx.xx.xx .1.3.6.1.2.1.1.2.0
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.9.1.2350

[2022-12-06 14:49:21] production.ERROR: Undefined array key 1
{"userId":1,"exception":"[object] (ErrorException(code: 0): Undefined
array key 1 at /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platforms/vendor_cisco.php:100)
[stacktrace]
#0 /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platforms/vendor_cisco.php(100):
Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platform.php(133):
include('...')
#2 /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platform.php(107):
OSS_SNMP\Platform->parse()
#3 /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/SNMP.php(964):
OSS_SNMP\Platform->__construct()
#4 /srv/ixpmanager/app/Models/Switcher.php(296): OSS_SNMP\SNMP->getPlatform()
#5 /srv/ixpmanager/app/Http/Controllers/Switches/SwitchPortController.php(539):
IXP\Models\Switcher->snmpPoll()
#6 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54):
IXP\Http\Controllers\Switches\SwitchPortController->listOpStatus()
#7 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45):
Illuminate\Routing\Controller->callAction()
#8 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262):
Illuminate\Routing\ControllerDispatcher->dispatch()
#9 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205):
Illuminate\Routing\Route->runController()
#10 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721):
Illuminate\Routing\Route->run()
#11 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128):
Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#12 /srv/ixpmanager/app/Utils/Http/Controllers/Frontend/EloquentController.php(188):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#13 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149):
IXP\Utils\Http\Controllers\Frontend\EloquentController->IXP\Utils\Http\Controllers\Frontend\{closure}()
#14 /srv/ixpmanager/app/Http/Middleware/Google2FA.php(79):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
IXP\Http\Middleware\Google2FA->handle()
#16 /srv/ixpmanager/app/Http/Middleware/Eloquent2Frontend.php(72):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
IXP\Http\Middleware\Eloquent2Frontend->handle()
#18 /srv/ixpmanager/app/Http/Middleware/ControllerEnabled.php(94):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#19 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
IXP\Http\Middleware\ControllerEnabled->handle()
#20 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#21 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Routing\Middleware\SubstituteBindings->handle()
#22 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#23 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
#24 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#25 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\View\Middleware\ShareErrorsFromSession->handle()
#26 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#27 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64):
Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
#28 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Session\Middleware\StartSession->handle()
#29 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#30 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
#31 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#32 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Cookie\Middleware\EncryptCookies->handle()
#33 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#34 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723):
Illuminate\Pipeline\Pipeline->then()
#35 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698):
Illuminate\Routing\Router->runRouteWithinStack()
#36 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662):
Illuminate\Routing\Router->runRoute()
#37 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651):
Illuminate\Routing\Router->dispatchToRoute()
#38 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167):
Illuminate\Routing\Router->dispatch()
#39 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128):
Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#40 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#41 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31):
Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#42 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#43 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#44 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40):
Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#45 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#46 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#47 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#48 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#49 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#50 /srv/ixpmanager/vendor/fruitcake/laravel-cors/src/HandleCors.php(38):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#51 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Fruitcake\Cors\HandleCors->handle()
#52 /srv/ixpmanager/vendor/fideloper/proxy/src/TrustProxies.php(57):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#53 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167):
Fideloper\Proxy\TrustProxies->handle()
#54 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103):
Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#55 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142):
Illuminate\Pipeline\Pipeline->then()
#56 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111):
Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#57 /srv/ixpmanager/public/index.php(89):
Illuminate\Foundation\Http\Kernel->handle()
#58 {main}

new Switch - FiberStore

Would like to add new switch - FiberStore S5850-48S6Q
(https://www.fs.com/products/29123.html)

geier@ixpmanager:$ snmpget -c my_secret -On -v 2c sw8.nidc.tix.ix.ne.tz .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "FSOS software, S5850 software (S5850 48S6Q), Version 7.2.2
Copyright (C) 2019 by FS.COM. All rights reserved.
Compiled Dec 10 09:12:14 2019"
geier@ixpmanager:
$ snmpget -c my_secret -On -v 2c sw8.nidc.tix.ix.ne.tz .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.52642.99.5803
geier@ixpmanager:~$

*.zip with MIBs : https://img-en.fs.com/file/user_manual/fs-s5850-mibs.zip

other output:
TIX-SW8# sh vers
FSOS Software, S5850, Version 7.2.2
Copyright (C) 2019 by FS.COM. All rights reserved.
The current running image is flash:/boot/S5850_Series-FSOS-v7.2.2.bin

TIX-SW8 uptime is 16 days, 3 hours, 40 minutes
Hardware Type is 48S6Q
Hardware Version is 2.0
SDRAM size 1024M
Flash size 2048M
EPLD Version is 2.3
BootRom Version is 8.1.3
System serial number is CG1904160793N0018
Current Web Version is 6.2.29.r2
TIX-SW8#

PS: yes, working on IXPManager ;-)

Please let me know if anything else needed.

Greetings,
Frank

.1.3.6.1.2.1.1.2.0 broken in IOS Everest?

Related to e929724#diff-bdbf492f60df7fa452aa8a8ea1aac98aR74 .

root@manager:~# snmpget -c $community -On -v 2c $hostname .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Cisco IOS Software [Everest], Catalyst L3 Switch Software (CAT3K_CAA-UNIVERSALK9-M), Version 16.6.2, RELEASE SOFTWARE (fc2)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2017 by Cisco Systems, Inc.
Compiled Wed 01-Nov-17 04:27 "

root@manager:~# snmpget -c $community -On -v 2c $hostname .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.9.1.1745

And .1.3.6.1.4.1.9.1 does not exist.

I am not 100% sure but I think that this used to work on Denali. The platform is a 3850.

getSerialNumber should not return "(not implemented)"

The getSerialNumber() method should return either a discrete value or else null, rather than returning the string "(not implemented)".

This impacts downstream consumers of OSS_SNMP, because it means that the only way to check if there's no serial number is to run a string match against "(not implemented)" rather than the more obvious isset().

IgniteNet FNS-SFP-24

Project Model : FNS-SFP-24
Firmware Version : 1.0.2.3

root@Indy-IXPM:/home/mhammett# snmpget -c MwIX-RO -On -v 2c 365-Ignitenet .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "FNS-SFP-24"
root@Indy-IXPM:/home/mhammett# snmpget -c MwIX-RO -On -v 2c 365-Ignitenet .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.259.6.10.120
root@Indy-IXPM:/home/mhammett# snmpget -c MwIX-RO -On -v 2c 365-Ignitenet .1.3.6.1.4.1.1991.1.1.1.1.2.0
.1.3.6.1.4.1.1991.1.1.1.1.2.0 = No Such Object available on this agent at this OID
root@Indy-IXPM:/home/mhammett# snmpget -c MwIX-RO -On -v 2c 365-Ignitenet .1.3.6.1.4.1.259.6.10.120
.1.3.6.1.4.1.259.6.10.120 = No Such Object available on this agent at this OID

Huawei S6720-54C-EI-48S-AC

Need to add SNMP support for this switch in order to integrate new equipment at AHTIC in Haiti.

Tried modifying /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platforms/vendor_huawei.php without success.

.1.3.6.1.2.1.1.1.0 = STRING: "S6720-54C-EI-48S-AC
Huawei Versatile Routing Platform Software
VRP (R) software,Version 5.170 (S6720 V200R010C00SPC600)
Copyright (C) 2007 Huawei Technologies Co., Ltd."

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.2011.2.23.343

Inconsistent results for Extreme switches when in stack

I'm trying to use this script to extract port to vlan information on some Extreme switches I have.

I have a stack of 4 x X440 extreme switches which have the following ports tagged in a vlan:

1:45
1:48
3:48

The Interface vlan id is: 1000034.

When running the following code:
print_r($snmpHost->useExtreme_Vlan()->getTaggedPortsForVlan(1000034));

We get an array returned with 96 entries indexed from 1001 - 1048 and 2001 - 2048 all of them set to false. The first issues is there should be 192 ports, but I think the ordering is also incorrect as the first 92 ports should have some tagged vlans.

If I manually walk the OID I can see data which looks more correct, e.g.


$ snmpwalk -v 2c -c <communityString> <IP> .1.3.6.1.4.1.1916.1.2.6.1.1.1.1000034
SNMPv2-SMI::enterprises.1916.1.2.6.1.1.1.1000034.1 = Hex-STRING: 00 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SNMPv2-SMI::enterprises.1916.1.2.6.1.1.1.1000034.2 = Hex-STRING: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SNMPv2-SMI::enterprises.1916.1.2.6.1.1.1.1000034.3 = Hex-STRING: 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SNMPv2-SMI::enterprises.1916.1.2.6.1.1.1.1000034.4 = Hex-STRING: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

I therefore suspect that function opaqueTaggedPorts() which in turn calls subOidWalk() isn't returning all the data. I've tried

Any help or advice much appreciated.

Jona

Cisco Nexus 9396

root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Cisco NX-OS(tm) n9000, Software (n9000-dk9), Version 6.1(2)I2(2b), RELEASE SOFTWARE Copyright (c) 2002-2013 by Cisco Systems, Inc. Compiled 8/7/2014 15:00:00"
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.9.12.3.1.3.1508

I'm not sure which OID is needed, but they all had the same response:

root@Indy-IXPM:/home/mhammett# snmpwalk -c [redacted] -On -v 2c [redacted] | grep SAL1833YM4Y
.1.3.6.1.2.1.47.1.1.1.1.11.10 = STRING: "SAL1833YM4Y"
.1.3.6.1.2.1.47.1.1.1.1.11.22 = STRING: "SAL1833YM4Y"
.1.3.6.1.2.1.47.1.1.1.1.11.149 = STRING: "SAL1833YM4Y"
root@Indy-IXPM:/home/mhammett# ^C
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.47.1.1.1.1.11.149
.1.3.6.1.2.1.47.1.1.1.1.11.149 = STRING: "SAL1833YM4Y"
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.47.1.1.1.1.11.10
.1.3.6.1.2.1.47.1.1.1.1.11.10 = STRING: "SAL1833YM4Y"
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.47.1.1.1.1.11.22
.1.3.6.1.2.1.47.1.1.1.1.11.22 = STRING: "SAL1833YM4Y"

Add Juniper EX3400 switch

snmpget -c community -On -v 2c switch_ip .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.2636.1.1.1.4.131.1

snmpget -c community -On -v 2c switch_ip .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Juniper Networks EX3400 Ethernet Switch , Junos OS Release 15.1X53-D5x EX series"

BGP 32BITS

Hi,

When i`m trying to get a 32bits ASN OSS_SNMP is returning value 0 when the ASN is 16bits the value comes correct!!

Example 16 bits:
[remoteASN] => 28328

Example 32 bits:
[remoteASN] => 0 ( Real ASN : 264024)

Celestica switch live ports.

Hi Barry,
I have an issue with a Celestica switch with Sonic OS. I can created via SNMP into the IXP, but I was unable to view the live ports and other features. I manually created the vendor_celestica.php, but still can't view the ports.
Could you help me please.
imagen

Opengear CM7148-2-DAC

I am trying to query a serial console server for the port names and descriptions for the serial ports. The Iface.php is hard coded to use OID_IF_DESCRIPTION and OID_IF_NAME and this device only seems to send the Ethernet connections if Iface->descriptions or Iface->names is called.

Any idea how to query the serial interfaces that are in:

.1.3.6.1.4.1.25049.17.2.1.2.x or
.1.3.6.1.4.1.25049.16.1.1.11.x

Php 7.1?

Hello. I have just forked this library and plan to clean it up a bit, remove magic etc. because I want to use it. However, I work only with php 7.1 and use all of it features. That would cause BC break though. Would you be interested in such PR?

Adding Extreme SLX devices

snmpget -c xxxxx -On -v 2c xxxxxx .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Extreme BR-SLX9850-4 Router, SLX Operating System Version 18r.1.00a."

snmpget -c xxxxxx -On -v 2c xxxxxx .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.1588.3.3.1.2000

Add support for Huawei S6720

Hello Team,
Would it be possible to add mentioned switch?

snmpget -c xxxxxxx -On -v 2c xxxxxxxx .1.3.6.1.2.1.1.1.0

.1.3.6.1.2.1.1.1.0 = STRING: "S6720-30C-EI-24S-AC
Huawei Versatile Routing Platform Software
VRP (R) software,Version 5.160 (S6720 V200R009C00SPC500)
Copyright (C) 2007 Huawei Technologies Co., Ltd."

snmpget -c xxxxx -On -v 2c xxxxxxx .1.3.6.1.2.1.1.2.0

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.2011.2.23.340

Thanks!

Failing composer install on machine running PHP7

Hello,

A "composer require opensolutions/oss-snmp" is resulting in:

[InvalidArgumentException]
Could not find package opensolutions/oss-snmp at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability

The problem may not be PHP7, but I bring it up because I have this package installed (and working wonderfully, thank you very much) on several other boxes that are not running PHP7.

If there is more information I can gather or anything I can test, please let me know. I will be happy to contribute in any way I can.

Thanks.

Support for Huawei - S6720-54C-EI-48S-AC

The SNMP query (snmpwalk) is returning:

.1.3.6.1.2.1.1.1.0 = STRING: "S6720-54C-EI-48S-AC
Huawei Versatile Routing Platform Software
VRP (R) software,Version 5.170 (S6720 V200R010C00SPC600)
Copyright (C) 2007 Huawei Technologies Co., Ltd."

We also edited a little bit the vendor_huawei.php file:

else if( preg_match('/^(S\d+-[A-Z0-9-]+)\s+Huawei Versatile Routing Platform Software\s+VRP (R) software,Version ([0-9.]+) ((S[0-9]+) [A-Z0-9]+)\s+Copyright (C) 2007 Huawei Technologies.*$/',

df0c788

After that change the Switch is being detected, version and model are shown in the portal.

What we're seeing now is the lack of interface detection.

image

Looks like we need a vendor-specific Iface.php file with the OID for Huawei.

Add support for Dell Force10 S4810

Hi Barry,

we use Dell Force10 S4810 at BCIX and they working partly together with IXP-Manager,
but full support would be great. Older devices with NON-Dell and original Force10
firmware has different outputs, but we're in 2015 and FTOS = Dell Networking OS
Operating System Version 9.7.0.0 is on the horizon, now ;-)

Here the output:

snmpget -c <> -On -v 2c dell-f10-s4810 .1.3.6.1.2.1.1.1.0

.1.3.6.1.2.1.1.1.0 = STRING: "Dell Networking OS Operating System Version: 2.0 Application Software Version: 9.6(0.0) Series: S4810 Copyright (c) 1999-2014 by Dell Inc. All Rights Reserved. Build Time: Sun Sep 28 10:02:15 2014"

next:

snmpget -c <> -On -v 2c dell-f10-s4810 .1.3.6.1.2.1.1.2.0

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.6027.1.3.14

And the serial number:

snmpget -c <> -On -v 2c dell-f10-s4810 .1.3.6.1.2.1.47.1.1.1.1.11.2

.1.3.6.1.2.1.47.1.1.1.1.11.2 = STRING: "HADL112720025"

Unable to add Allied Telesis AT-28GTX with IXP Manager v4

Hello!
I am trying to integrate Allied Telesis AT-28GTX switch with IXP Manager v4 through SNMP v2c but unable to become successful in it. I have followed your guide on how to add platform support by going through these links.

https://github.com/opensolutions/OSS_SNMP/wiki/Device-Discovery
https://github.com/opensolutions/OSS_SNMP/blob/master/examples/platform.php

I have copied the example script from the above link and paste it on this path /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platforms/
and named it as vendor_allied_telesis.php. The machine on which i am running IXP Manager v4 is Ubuntu Server 16.04.3 LTS codename xenial. I have configured SNMP agent on the switch using the official documentation of Allied Telesis. When I try to add the the switch from the IXP Manager GUI I get this error:

Uh oh! Unexpected Error!
We're very sorry but something we didn't expect has just happened.

Following are the outputs of the commands that i have run on Machine where ixp manager is installed:
sudo snmpget -c xbits -On -v 2c 192.168.100.170 .1.3.6.1.2.1.1.1.0
Output:
.1.3.6.1.2.1.1.1.0 = STRING: "Allied Telesis router/switch, AW+ v5.4.7-2.5"

sudo snmpget -c xbits -On -v 2c 192.168.100.170 .1.3.6.1.2.1.1.2.0
Output:
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.207.1.14.118

Management Interface IP = 192.168.100.170
Community String = xbits

I am unable to find the the log location of IXP Manager as well so suggest me how to add support for the Allied Telesis switch. The screenshot of error is attached below for reference.
image

Add support for Brocade FCX

Hey,

and another Brocade devices which is not detected by IXP-Manager:

snmpget -c <> -On -v 2c brocade-fcx .1.3.6.1.2.1.1.1.0

.1.3.6.1.2.1.1.1.0 = STRING: "Brocade Communications Systems, Inc. FCX624S, IronWare Version 08.0.10T7f1 Compiled on Jan 07 2014 at 09:13:59 labeled as FCXS08010"

snmpget -c <> -On -v 2c brocade-fcx .1.3.6.1.2.1.1.2.0

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.1991.1.3.54.1.1.1.1

And the serial number:

snmpget -c <> -On -v 2c brocade-fcx .1.3.6.1.4.1.1991.1.1.1.1.2.0

.1.3.6.1.4.1.1991.1.1.1.1.2.0 = STRING: "BCV2249F0P9"

how to get L3 interface IP

I can use snmpwalk get cisco L3 switch interfaces IP information
snmpwalk -v 2c -c community switchIP 1.3.6.1.2.1.4.20.1.1
I search Document "\ OSS_SNMP \MIBS \Iface" not can find class
Is it possible to use in oss_snmp?

Unable to discover the switch model through IXP Manager

The IXP manager discovers the vendor but doesn't discover the model of the switch.

image

Also the switchports don't show up in IXP while mapping virtual interface to a physical interface

image

Switch details

NXOS: version 9.3(7)
Vendor Cisco
Model N9K-C93180YC-EX

Add support for Brocade RX-8

Hey,

Brocade RX-8 should be added to OSS_SNMP.

From IXP-Manager ixptool.php -a switch-cli.snmp-poll -v :

Polling brocade-rx8 with SNMP request to brocade-rx8.bcix.de
2015-01-28T22:07:52+00:00 INFO (6):  [brocade-rx8] Platform: Found Model: Unknown
2015-01-28T22:07:52+00:00 INFO (6):  [brocade-rx8] Platform: Found Os: Unknown
2015-01-28T22:07:52+00:00 INFO (6):  [brocade-rx8] Platform: Found OsDate: Unknown
2015-01-28T22:07:52+00:00 INFO (6):  [brocade-rx8] Platform: Found OsVersion: Unknown
2015-01-28T22:07:52+00:00 INFO (6):  [brocade-rx8] Platform: Found SerialNumber: (not implemented)

Can you add this to OSS_SNMP that IXP-Manager can use it?

Here the output:

snmpget -c <> -On -v 2c brocade-rx8 .1.3.6.1.2.1.1.1.0

.1.3.6.1.2.1.1.1.0 = STRING: "Foundry Networks, Inc. BigIron RX, IronWare Version V2.7.2aT143 Compiled on Sep 29 2009 at 17:15:24 labeled as V2.7.02a"

next:

snmpget -c <> -On -v 2c brocade-rx8 .1.3.6.1.2.1.1.2.0

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.1991.1.3.40.2.2

And the serial number:

snmpget -c <> -On -v 2c brocade-rx8 .1.3.6.1.4.1.1991.1.1.1.1.2.0

.1.3.6.1.4.1.1991.1.1.1.1.2.0 = STRING: "SA03075008"

MIB Complications - Question

We've just recently hit one instance where a user had mibs present on the system for his servertech pdu's and they modify the return data to add what type of unit they are measuring. I've put examples of the walks below.

snmpwalk -v 2c -c public 10.0.0.2 .1.3.6.1.4.1.1718.3.2.1.1.11.1 ;
Sentry3-MIB::towerActivePower.1 = INTEGER: 1730 Watts
snmpwalk -OU -v 2c -c public 10.0.0.2 .1.3.6.1.4.1.1718.3.2.1.1.11.1
Sentry3-MIB::towerActivePower.1 = INTEGER: 1730

If I set up an oss_snmp instance and tell it to read the above oid I get INTEGER: 1740 Watts as the initial return value that it passes to the parser. The parser knows this should just be an int and returns back 740.

Is there a way that you know of to force snmpwalk to NOT utilize the available mib?

Support 64bit BGP ASN

When querying a BGPv4 enabled router using OSS_SNMP a negative number is returned if 64bit ASN are used. In the below example the correct AS number is 4242422222:

$ snmpwalk -c public -v 2c ip.address 1.3.6.1.2.1.15.2.0
iso.3.6.1.2.1.15.2.0 = INTEGER: -52545074

The fix seems to be subtracting the result from 4294967296 if the SNMP value is negative. i.e. 4294967296-52545074= 4242422222.

This issue is reproducible when using the bundled BGP sample:
https://github.com/opensolutions/OSS_SNMP/blob/master/examples/bgp.php

Please add support for Brocade MLXe-16

Hello Barry,

can you add support for Brocade MLXe-16 to OSS_SNMP so IXP-Manager can use it?

See output:

snmpget -c <> -On -v 2c 10.255.255.3 .1.3.6.1.2.1.1.1.0

.1.3.6.1.2.1.1.1.0 = STRING: "Brocade MLXe (System Mode: MLX), IronWare Version V5.7.0dT163 Compiled on Sep 23 2015 at 09:35:50 labeled as V5.7.00db"

snmpget -c <> -On -v 2c 10.255.255.3 .1.3.6.1.2.1.1.2.0

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.1991.1.3.55.1.2

snmpget -c <> -On -v 2c 10.255.255.3 .1.3.6.1.4.1.1991.1.1.1.1.2.0

.1.3.6.1.4.1.1991.1.1.1.1.2.0 = STRING: "BFQ4643L127"

update regex for newer cisco ios-xe models

snmp output from a cisco 3650

iso.3.6.1.2.1.1.1.0 = STRING: "Cisco IOS Software, IOS-XE Software, Catalyst L3 Switch Software (CAT3K_CAA-UNIVERSALK9-M), Version 03.06.06E RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2016 by Cisco Systems, Inc.
Compiled Sat 17-Dec-"

the regex below works on both the text above and the sample text in vendor_cisco.php

/Cisco IOS Software, IOS-XE Software,\s+([a-zA-Z0-9\s]+)\sSoftware\s(([0-9A-Za-z().-_]+)),\sVersion\s([0-9A-Za-z.]+)\sRELEASE SOFTWARE.*/

Brocade VDX Switch

root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -RO -On -v 2c [redacted] .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Brocade VDX Switch, BR-VDX6720-24, Network Operating System Software Version 4.1.3b."
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted]-RO -On -v 2c [redacted] .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.1588.2.2.1.1.1.1
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted]-RO -On -v 2c [redacted] .1.3.6.1.4.1.1588.2.2.1.1.1.1
.1.3.6.1.4.1.1588.2.2.1.1.1.1 = No Such Object available on this agent at this OID
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted]-RO -On -v 2c [redacted] .1.3.6.1.4.1.1991.1.1.1.1.2.0
.1.3.6.1.4.1.1991.1.1.1.1.2.0 = No Such Object available on this agent at this OID

Add Arista Switch

root@ixpm:# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.47.1.1.1.1.11.1
.1.3.6.1.2.1.47.1.1.1.1.11.1 = STRING: "JPE15220774"
root@ixpm:# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Arista Networks EOS version 4.17.3F running on an Arista Networks DCS-7050SX-96-SSD"
root@ixpm:# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.30065.1.3011.7050.3741.96.761

encoded keys ?

if have some issues with encoded keys:

RUCKUS-SZ-WLAN-MIB::ruckusSZAPMac.'.$y*..'.32 = STRING: XX:XX:XX:XX:XX:XX

as you can see, at the end of my key there is an encoded key-part .'.$y*..'., this is also shown with plain cli client, but if i add the output-filter -O b all keys are fine:

snmpwalk -O b -c yyyyyyy XXX.XXX.XXX.XXX .1.3.6.1.4.1.25053.1.4.2.1.1.2.2
...
RUCKUS-SZ-WLAN-MIB::ruckusSZAPMac.6.36.121.42.5.80.32 = STRING: XX:XX:XX:XX:XX:XX

how can i set this output filter with this lib to get the key in right way?

Cound not perform walk for OID

Trying to set up IXP Manager. Having problems with OSS_SNMP examples.

Ubuntu Server 12.10
PHP Version 5.4.6-1ubuntu1.4
NET-SNMP Support enabled
NET-SNMP Version 5.4.3
PHP SNMP Version 0.1

I can perform manual snmpwalk from cli

Thanks in advance
Brian

PHP Fatal error: Uncaught exception 'OSS_SNMP\Exception' with message 'Cound not perform walk for OID .1.3.6.1.2.1.1.4.0' in /usr/local/ixp/library/OSS_SNMP.git/OSS_SNMP/SNMP.php:189
Stack trace:
#0 /usr/local/ixp/library/OSS_SNMP.git/OSS_SNMP/MIBS/System.php(84): OSS_SNMP\SNMP->get('.1.3.6.1.2.1.1....')
#1 /usr/local/ixp/library/OSS_SNMP.git/OSS_SNMP/MIBS/System.php(155): OSS_SNMP\MIBS\System->contact()
#2 /usr/local/ixp/library/OSS_SNMP.git/examples/system-info.php(72): OSS_SNMP\MIBS\System->getAll()
#3 {main}

thrown in /usr/local/ixp/library/OSS_SNMP.git/OSS_SNMP/SNMP.php on line 189

Cisco Nexus 3548

root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.1.0 = STRING: "Cisco NX-OS(tm) n3500, Software (n3500-uk9), Version 6.0(2)A1(1d), RELEASE SOFTWARE Copyright (c) 2002-2012 by Cisco Systems, Inc. Device Manager Version nms.sro not found, Compiled 1/30/2014 9:00:00"
root@Indy-IXPM:/home/mhammett# snmpget -c [redacted] -On -v 2c [redacted] .1.3.6.1.2.1.1.2.0
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.9.12.3.1.3.1238
root@Indy-IXPM:/home/mhammett# snmpwalk -c [redacted] -On -v 2c [redacted] | grep FOC1904R1FK
.1.3.6.1.2.1.47.1.1.1.1.11.10 = STRING: "FOC1904R1FK"
.1.3.6.1.2.1.47.1.1.1.1.11.149 = STRING: "FOC1904R1FK"

Add support for CE6870-24S6CQ-EI

Need to add SNMP support for this switch in order to integrate new equipment.

Tried modifying /srv/ixpmanager/vendor/opensolutions/oss-snmp/src/OSS_SNMP/Platforms/vendor_huawei.php without success.

iso.3.6.1.2.1.1.1.0 = STRING: "Huawei Versatile Routing Platform Software
VRP (R) software, Version 8.150 (CE6870EI V200R002C50SPC800)
Copyright (C) 2012-2017 Huawei Technologies Co., Ltd.
HUAWEICE6870-24S6CQ-EI
"

.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.2011.2.239.33

update brocade mlx for extra spaces

Hi guys - I wasn't sure how to code this to make it usable for a pull. We added a switch and the software is a bit newer. The hangup was the extra space after "Compiled on Dec "

.1.3.6.1.2.1.1.1.0 = STRING: "Brocade NetIron MLX (System Mode: MLX), IronWare Version V5.6.0aT163 Compiled on Dec 5 2013 at 11:00:34 labeled as V5.6.00a"

.1.3.6.1.2.1.1.1.0 = STRING: "Brocade NetIron MLX (System Mode: MLX), IronWare Version V5.4.0cT163 Compiled on Mar 25 2013 at 17:08:16 labeled as V5.4.00c"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.