summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
2013-07-24addrconv: replace bin<->text converters for mac addressesYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-24addrconv: binary <-> text conversion of mac/ipv4/ipv6 addressesYAMAMOTO Takashi
implemented as a simple wrapper of netaddr. background: the goal is to use the consistent representations of addresses throughout the tree, instead of the current ad-hoc representations like a list of int16 for ipv6 address. - netaddr style text (eg. '10.0.0.1', 'ff02::1') for ryu-app level api. - on-wire binary for internal use. this is the first step to the direction. ie. have a single implementation of address representation conversion. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-24lib/packet: add Link Aggregation Control ProtocolYuichi Ito
Signed-off-by: Yuichi Ito <ito.yuichi0@gmal.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-24of-wire json test: a program to generate test data for unit testsYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-23dist: pypi tar ball misses tools directoryIsaku Yamahata
Reported-by: Satoshi Kobayashi <satoshi-k@stratosphere.co.jp> Signed-off-by: Isaku Yamahata <yamahata@private.email.ne.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-22stringify.StringifyMixin.__str__: simplifyYAMAMOTO Takashi
simplify the code a bit. suggested by Isaku Yamahata. no functional changes are intended. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-22rest_router: stop catching ExceptionYAMAMOTO Takashi
catch more specific exceptions instead. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of-wire json test: unit testYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of-wire json test: generated *.packetYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of-wire json test: expected resultsYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of-wire json: adapt OF13 OFPMeterBandYAMAMOTO Takashi
prefix OFPMeterBand.type and len with _ to avoid being picked by stringifymixin. they are redundant as json representation has python class name like OFPMeterBandDrop. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of-wire json: adapt OF13 OFPTableFeaturesStatsReplyYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of-wire json: adapt OF13 OFPPortDescStatsReplyYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of13: fix OFPTableFeaturesStats.parserYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of13: fix OFP_TABLE_FEATURES_PACK_STRYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19of1.3: fix OFPort parserFUJITA Tomonori
s/length/_length/ Trace: [0x1000082e5f694c00] ('143.0.1.211', 56538): OFPGetConfigReply received: flags=NORMAL miss_send_len=1518 Error in the datapath 1000082e5f694c00 from ('143.0.1.211', 56538) hub: uncaught exception: Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/lib/hub.py", line 48, in _launch func(*args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/controller/controller.py", line 312, in datapath_connection_factory datapath.serve() File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/controller/controller.py", line 232, in serve self._recv_loop() File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/controller/controller.py", line 97, in deactivate method(self) File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/controller/controller.py", line 165, in _recv_loop version, msg_type, msg_len, xid, buf) File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/ofproto_parser.py", line 54, in msg return msg_parser(datapath, version, msg_type, msg_len, xid, buf) File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/ofproto_v1_3_parser.py", line 50, in msg_parser return parser(datapath, version, msg_type, msg_len, xid, buf) File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/ofproto_v1_3_parser.py", line 2192, in parser offset += b._length AttributeError: 'OFPPort' object has no attribute '_length' Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-19appease pep8YAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-18add router Ryu applicationwatanabe.fumitaka
This patch implements router Ryu application. packet is forwarded on the static routing table. The routing table can be set up by the REST commands. and, Router can handle each vlan groups separately. -------------------------------------------- * Example case: Set static route on vlanID=10 From: address(172.16.10.0/24) belongs to the rest_router(switch_id=0000000000000001) To : address(10.0.255.0/24) belongs to the gateway router(192.168.10.20) - Following is the rest_router(switch_id=0000000000000001)'s setting. If the gateway router operates by the rest_router Ryu applicaion too, same setting is required. 1. add Address data(172.16.10.0/24, default_route=172.16.10.1) $ curl -X POST -d '{"address":"172.16.10.1/24"}' http://localhost:8080/router/0000000000000001/10 2. add Address data(192.168.10.0/24, default_route=192.168.10.1) $ curl -X POST -d '{"address":"192.168.10.1/24"}' http://localhost:8080/router/0000000000000001/10 3. add Static route(destination=10.0.255.0/24, gateway=192.168.10.20) $ curl -X POST -d '{"destination":"10.0.255.0/24","gateway":"192.168.10.20"}' http://localhost:8080/router/0000000000000001/10 - route can not be registered, if gateway's address is not registered as 'address data' 4. check of the registered address data and routing data. $ curl http://localhost:8080/router/0000000000000001/10 5. you can send packets from host(172.16.10.0/24) to gateway router(192.168.10.20), and send to host(10.0.255.0/24) if gateway router is set up correctly. (packet needs to contain vlan-tag=10) -------------------------------------------- Please refer to rest_router.py comments, for other RESTcommand interfaces. Signed-off-by: WATANABE Fumitaka <watanabe.fumitaka@nttcom.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-17app/quantum_adapter: Lazily initialize neutron clientIsaku Yamahata
When ryu starts up, related openstack components (keystone and neutron) might not be running. They might be during start up process. In that case, quantum_adapter results in exception as follows. So in order to avoid ordering of starting up, lazily initialize neutoron api. > hub: uncaught exception: Traceback (most recent call last): > File "/ryu/lib/hub.py", line 48, in _launch > func(*args, **kwargs) > File "/ryu/base/app_manager.py", line 173, in _event_loop > handler(ev) > File "/ryu/app/quantum_adapter.py", line 398, in dp_handler > ovs_switch = self._get_ovs_switch(dpid) > File "/ryu/app/quantum_adapter.py", line 381, in _get_ovs_switch > ovs_switch = OVSSwitch(dpid, self.nw, self.ifaces, self.logger) > File "/ryu/app/quantum_adapter.py", line 167, in __init__ > token = _get_auth_token(logger) > File "/ryu/app/quantum_adapter.py", line 90, in _get_auth_token > httpclient.authenticate() > File "/neutronclient/client.py", line 211, in authenticate > content_type="application/json") > File "/neutronclient/client.py", line 141, in _cs_request > raise exceptions.ConnectionFailed(reason=e) > ConnectionFailed: Connection to neutron failed: [Errno 111] ECONNREFUSED Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-16ofproto v1.3: implement MeterBand parsersIsaku Yamahata
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-16Send MeterMod messagesPhilipp Aeschlimann
Signed-off-by: Philipp Aeschlimann <aepp@zhaw.ch> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13quantum_adapter: race between ovs port deletion and plugin port deletionIsaku Yamahata
The order between the notification of ovs port deletion via OVSDB protocol and the notification network id/port deletion via REST from quantum plugin isn't deterministic. So when ovs port is deleted, the corresponding network id may or may not exist. The code wrongly assumed the order, so resulted in the following exception. When ovs port is deleted and the corresponding network id isn't find, just ignore the exception. > (19257) accepted ('127.0.0.1', 36841) > 127.0.0.1 - - [19/Jun/2013 11:24:25] "DELETE /v1.0/tunnels/networks/8179bb70-a63f-4c74-a82e-a21f3c275c9a/key HTTP/1.1" 200 115 0.000383 > hub: uncaught exception: Traceback (most recent call last): > File "/opt/stack/ryu/ryu/lib/hub.py", line 50, in _launch > func(*args, **kwargs) > File "/opt/stack/ryu/ryu/base/app_manager.py", line 104, in _event_loop > handler(ev) > File "/opt/stack/ryu/ryu/app/quantum_adapter.py", line 368, in > port_del_handler > self._port_handler(ev.dp.id, port.port_no, name, False) > File "/opt/stack/ryu/ryu/app/quantum_adapter.py", line 336, in _port_handler > ovs_switch.update_port(port_no, port_name, add) > File "/opt/stack/ryu/ryu/app/quantum_adapter.py", line 279, in update_port > self._update_vif_port(old_port, add=False) > File "/opt/stack/ryu/ryu/app/quantum_adapter.py", line 194, in > _update_vif_port > self.network_api.remove_port(network_id, self.dpid, port.ofport) > File "/opt/stack/ryu/ryu/controller/network.py", line 368, in remove_port > self.networks.remove(network_id, dpid, port_no) > File "/opt/stack/ryu/ryu/controller/network.py", line 119, in remove > raise NetworkNotFound(network_id=network_id) > NetworkNotFound: no such network id 8179bb70-a63f-4c74-a82e-a21f3c275c9a Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13simple_vlan.py: race conditionIsaku Yamahata
When tunnel key is registers, network is is not always registered. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13gre_tunnel.py: race conditionIsaku Yamahata
When tunnel key add/del event fires, the corresponding network_id does not necessarily exists due to race condition. So mask it. (15612) accepted ('127.0.0.1', 45714) 127.0.0.1 - - [25/Jun/2013 12:18:18] "DELETE /v1.0/networks/462be334-3160-48ae-9ef8-a456dc866f8f HTTP/1.1" 200 115 0.000393 (15612) accepted ('127.0.0.1', 45715) 127.0.0.1 - - [25/Jun/2013 12:18:18] "DELETE /v1.0/tunnels/networks/462be334-3160-48ae-9ef8-a456dc866f8f/key HTTP/1.1" 200 115 0.000260 hub: uncaught exception: Traceback (most recent call last): File "/opt/stack/ryu/ryu/lib/hub.py", line 50, in _launch func(*args, **kwargs) File "/opt/stack/ryu/ryu/base/app_manager.py", line 104, in _event_loop handler(ev) File "/opt/stack/ryu/ryu/app/gre_tunnel.py", line 233, in tunnel_key_del_handler for (dpid, port_no) in self.nw.list_ports(network_id): File "/opt/stack/ryu/ryu/controller/network.py", line 325, in list_ports return self.networks.list_ports(network_id) File "/opt/stack/ryu/ryu/controller/network.py", line 103, in list_ports raise NetworkNotFound(network_id=network_id) NetworkNotFound: no such network id 462be334-3160-48ae-9ef8-a456dc866f8f Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13network: add a helper function to list ports that doesn't raiseIsaku Yamahata
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13gre_tunnel: exception due to race conditionIsaku Yamahata
This depends on thread scheduling. When event handler is invoked, there may not corresponding network_id in network module. In fact, Network.remove_network() fires EventNetworkPort(add_del=False) before EventNetworkDel event so that it is unnecessary to call _vm_port_mac_handler(). > 127.0.0.1 - - [19/Jun/2013 11:24:25] "DELETE > /v1.0/networks/8179bb70-a63f-4c74-a82e-a21f3c275c9a HTTP/1.1" 200 115 0.000488 > hub: uncaught exception: Traceback (most recent call last): > File "/opt/stack/ryu/ryu/lib/hub.py", line 50, in _launch > func(*args, **kwargs) > File "/opt/stack/ryu/ryu/base/app_manager.py", line 104, in _event_loop > handler(ev) > File "/opt/stack/ryu/ryu/app/gre_tunnel.py", line 210, in network_del_handler > for (dpid, port_no) in self.nw.list_ports(network_id): > File "/opt/stack/ryu/ryu/controller/network.py", line 319, in list_ports > return self.networks.list_ports(network_id) > File "/opt/stack/ryu/ryu/controller/network.py", line 97, in list_ports > raise NetworkNotFound(network_id=network_id) > NetworkNotFound: no such network id 8179bb70-a63f-4c74-a82e-a21f3c275c9a Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13network.py: exception in Networks.remove_port()Isaku Yamahata
Neutron plugin can call remove_port after network deletion for automatic delete port like router/dhcp port. So ignore NetworkNotFound exception. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13network: sort out order between event and actual deletion of networkIsaku Yamahata
And make Network.remove_network more robust. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13network.py: sort out order between event and actual deletion of portIsaku Yamahata
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-13app/gre_tunnel.py: typo has_network -> has_networksIsaku Yamahata
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12app/quantum_adapter: pylintIsaku Yamahata
W: 18,0: Unused import logging W: 28,0: Unused import event Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12app/simple_vlan: pylintIsaku Yamahata
W: 17,0: Unused import logging Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12controller/network: pylintIsaku Yamahata
W: 18,0: Unused import logging Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12add a test for ryu.lib.stringifyYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12test_parser_v12: abuse this to test to_jsondict and from_jsondictYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12of1.3: omit mask attribute from str() when appropriateYAMAMOTO Takashi
normalize str() outputs so that tests like str(msg1) == str(msg2) more likely succeed. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12of1.3: of-wire json adaptYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12of1.2: omit mask attribute from str() when appropriateYAMAMOTO Takashi
normalize str() outputs so that tests like str(msg1) == str(msg2) more likely succeed. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12of1.2: of-wire json adaptYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12of1.0: of-wire json adaptYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-12StringifyMixin: json supportYAMAMOTO Takashi
factor out guts of StringifyMixin into a separate module. add methods to convert to/from json.loads/dumps-compatible dictionary. this is mainly for json representation of of-wire (OFPxxx) classes. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-11ryu/flags: rename config paramerters related to openstackYoshihiro Kaneko
Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-11app/quantum_adapter: fix missing change to neutronYoshihiro Kaneko
Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-11app/quantum_adapter: project rename quantum -> neutronIsaku Yamahata
Catch up for rename from quantumclient to neutronclient. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-11app/client: update for quantum->neutron changeIsaku Yamahata
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-10fix comment typos (ofprotp -> ofproto)YAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-10fix typos (mpls_lable -> mpls_label)YAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-09base/app_manager: teach event dispatcher stateIsaku Yamahata
When independent methods for different dispatchers defined, all methods are called independent of state. This patch teach event dispatcher state. The following class class PacketTesting(app_manager.RyuApp): @set_ev_cls(ofp_event.EventOFPEchoRequest, MAIN_DISPATCHER) def _echo_rep_main(self, ev): print "DEBUG: In Handler for Echo Request (Main)" @set_ev_cls(ofp_event.EventOFPEchoRequest, CONFIG_DISPATCHER) def _echo_rep_conf(self, ev): print "DEBUG: In Handler for Echo Request (Config)" @set_ev_cls(ofp_event.EventOFPEchoRequest, HANDSHAKE_DISPATCHER) def _echo_rep_hand(self, ev): print "DEBUG: In Handler for Echo Request (Handshake)" output > EVENT ofp_event->PacketTesting EventOFPEchoRequest > DEBUG: In Handler for Echo Request (Config) > DEBUG: In Handler for Echo Request (Dead) > DEBUG: In Handler for Echo Request (Handshake) > DEBUG: In Handler for Echo Request (Main) Reported-by: Alan Barr <alanbarr2002@gmail.com> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-09use ofproto.OFP_NO_BUFFER in some placesYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
2013-07-09define OFP_NO_BUFFERYAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>