<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">That patch has been pushed to the repository.<div><br></div><div>BTW, the patch just makes the default value more useful. You could have also just provided it as an argument when constructing the request:</div><div>ofp_port_stats_request(port_no = of.OFPP_NONE)</div><div><br></div><div>-- Murphy</div><div><br><div><div>On Sep 21, 2012, at 8:49 AM, Weiyang Mo wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi, Murphy and William,</div><div> </div><div>Sorry about my late reply. My code is similar to william's but didn't work in original cases.</div><div> </div><div>I just referred to William's patch and it worked fine now. I got each port's number and statstics as well. </div>
<div> </div><div>I really appreciate you helped me a a lot to figure it out.</div><div> </div><div>Best</div><div> </div><div>Weiyang<br><br></div><div class="gmail_quote">2012/9/20 Murphy McCauley <span dir="ltr"><<a href="mailto:murphy.mccauley@gmail.com" target="_blank">murphy.mccauley@gmail.com</a>></span><br>
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; position: static; z-index: auto; " class="gmail_quote">Glad you got it working. Can you submit your patch as a pull request against betta on github? (I want to at least make a comment on it)<br>
<span class="HOEnZb"><font color="#888888"><br>
-- Murphy<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Sep 20, 2012, at 8:38 PM, William Emmanuel Yu wrote:<br>
<br>
> Hi Murphy,<br>
><br>
> Yes. Flows show up fine. However, no port statistics are visible. I also<br>
> did a Wireshark as suggested. After installing flows and successfully<br>
> seeing them flow statistics, I requested for port statistics (OF Type 16<br>
> Stats Type 4 - PORT Port #0). I get a proper reply (OF Type 17 Stats<br>
> Type 4 - PORT) but it has no payload.<br>
><br>
> I looked at the class ofp_port_stats_request (object) in<br>
> libopenflow_01.py and found out port_no is set to 0 by default. In the<br>
> openflow 1.0 specification, this should be set to OFPP_NONE to return<br>
> all port statistics.<br>
><br>
> <a href="https://github.com/hip2b2/poxstuff/blob/master/libopenflow_01.py.ANY_PORT.patch" target="_blank">https://github.com/hip2b2/poxstuff/blob/master/libopenflow_01.py.ANY_PORT.patch</a><br>
><br>
> After this, it now works!<br>
><br>
> On Thu, 2012-09-20 at 18:57 -0700, Murphy McCauley wrote:<br>
>> Are you sure there's anything wrong here? Are you actually installing flows?<br>
>><br>
>> Port 65534 is OFPP_LOCAL; this flow is apparently permanently installed. I don't offhand know exactly why, but it's probably to enable communication with the controller or something.<br>
>><br>
>> If I actually install flows, they show up just fine for me. Run flow_stats and forwarding.l2_learning at the same time, and then do a ping between hosts on your switches. No problem here -- flows show up just fine.<br>
>><br>
>> -- Murphy<br>
>><br>
>> On Sep 20, 2012, at 5:43 PM, William Emmanuel Yu wrote:<br>
>><br>
>>> Here is the code I used to test:<br>
>>> <a href="https://github.com/hip2b2/poxstuff/blob/master/flow_stats.py" target="_blank">https://github.com/hip2b2/poxstuff/blob/master/flow_stats.py</a><br>
>>><br>
>>> I still don't know how to attach debugging into Pox to dig deeper. Is<br>
>>> there documentation on how to do that? Worst case, I will just have to<br>
>>> put debugging stuff in the pox code itself.<br>
>>><br>
>>> Thanks.<br>
>>><br>
>>> On Thu, 2012-09-20 at 17:02 -0700, Murphy McCauley wrote:<br>
>>>> can one or both of you post code to test?<br>
>>>><br>
>>>> On Sep 20, 2012 3:00 PM, "William Emmanuel S. Yu" <<a href="mailto:wyu@ateneo.edu">wyu@ateneo.edu</a>><br>
>>>> wrote:<br>
>>>> Same here. Still trying to find out what is wrong.<br>
>>>> "Sent on the move."<br>
>>>><br>
>>>> ______________________________________________________________<br>
>>>> From: Weiyang Mo <<a href="mailto:moweiyang1988@gmail.com">moweiyang1988@gmail.com</a>><br>
>>>> Date: Thu, 20 Sep 2012 14:53:44 -0700<br>
>>>> To: William Emmanuel Yu<<a href="mailto:wyu@ateneo.edu">wyu@ateneo.edu</a>>; Murphy<br>
>>>> McCauley<<a href="mailto:murphy.mccauley@gmail.com">murphy.mccauley@gmail.com</a>><br>
>>>> Cc: <<a href="mailto:pox-dev@lists.noxrepo.org">pox-dev@lists.noxrepo.org</a>><br>
>>>> Subject: Re: [pox-dev] How can POX get packet counts (or beta<br>
>>>> transferred) from a switch within a timeline.<br>
>>>><br>
>>>><br>
>>>> Hi,William<br>
>>>><br>
>>>> I got the same problems on my side. I already tried both on<br>
>>>> "betta" and Murphy fork.<br>
>>>><br>
>>>> It seems that whatever the traffic goes through switches, the<br>
>>>> returned switch port number is always "65534" and bytes_rx<br>
>>>> always 0 thus I cannot get packet counts from a specific port<br>
>>>> correctly.<br>
>>>><br>
>>>> Any advice?<br>
>>>><br>
>>>> Thanks very much.<br>
>>>><br>
>>>> Weiyang<br>
>>>><br>
>>>><br>
>>>> 2012/9/19 William Emmanuel Yu <<a href="mailto:wyu@ateneo.edu">wyu@ateneo.edu</a>><br>
>>>> Hi Weiyang,<br>
>>>><br>
>>>> Yes. You should be using port stats for that. So I<br>
>>>> tried it myself but<br>
>>>> now I do not get any port stats data. Here is my code.<br>
>>>> It's empty. I am<br>
>>>> using the Murphy fork.<br>
>>>><br>
>>>> On the multiple listeners, yes you can specify various<br>
>>>> actions within<br>
>>>> the callback function. In my emailed sample, I just<br>
>>>> log.debug() the<br>
>>>> output but you can do anything you like such as write<br>
>>>> to a database and<br>
>>>> the like.<br>
>>>><br>
>>>> Good luck!<br>
>>>><br>
>>>> On Thu, 2012-09-20 at 15:10 +1200, Sam Russell wrote:<br>
>>>>> What would it take to get your mods back into<br>
>>>> mainstream? Is there any<br>
>>>>> tidying or the like that we can help with?<br>
>>>>><br>
>>>>> Sent from my iPhone<br>
>>>>><br>
>>>>> On Sep 20, 2012, at 3:07 PM, Murphy McCauley<br>
>>>>> <<a href="mailto:murphy.mccauley@gmail.com">murphy.mccauley@gmail.com</a>> wrote:<br>
>>>>><br>
>>>>><br>
>>>>><br>
>>>>>> I think that's a known problem.<br>
>>>>>><br>
>>>>>><br>
>>>>>> The official noxrepo fork currently has a number<br>
>>>> of known bugs which<br>
>>>>>> are addressed in my fork (MurphyMc/pox), and my<br>
>>>> fork has a number of<br>
>>>>>> other improvements. One of these days, the<br>
>>>> changes in my fork will<br>
>>>>>> be upstreamed, but for the moment, you should<br>
>>>> really just pull POX<br>
>>>>>> from me instead of noxrepo.<br>
>>>>>><br>
>>>>>><br>
>>>>>> -- Murphy<br>
>>>>>><br>
>>>>>><br>
>>>>>> On Sep 19, 2012, at 7:33 PM, Weiyang Mo wrote:<br>
>>>>>><br>
>>>>>>> Hi, William,<br>
>>>>>>><br>
>>>>>>> Thanks very much. But I still have some<br>
>>>> questions about getting<br>
>>>>>>> statistics.<br>
>>>>>>><br>
>>>>>>> As mentioned in POX wiki, We can use different<br>
>>>> statistics event to<br>
>>>>>>> get different types of statistics. What I want<br>
>>>> to get from a<br>
>>>>>>> switch is (1) it's switch ID (DPID) (2) all<br>
>>>> packet counts on each<br>
>>>>>>> port<br>
>>>>>>><br>
>>>>>>> If I only use<br>
>>>>>>><br>
>>>> "core.openflow.addListenerByName("FlowStatsReceived",<br>
>>>>>>> statsreceived)", the things I can get is that<br>
>>>> the total packet<br>
>>>>>>> counts from all ports, but no DPID or inport<br>
>>>> number. Thus I guess<br>
>>>>>>> I may need use<br>
>>>>>>> "of.ofp_port_stats_request()" and<br>
>>>>>>><br>
>>>> core.openflow.addListenerByName("PortStatsReceived",<br>
>>>>>>> statsreceived)<br>
>>>>>>> But here I meet with a problem. I tried similar<br>
>>>> things as<br>
>>>>>>> ofp_flow_stats_request() as follows:<br>
>>>>>>><br>
>>>>>>> def countrequest ():<br>
>>>>>>> swnum = 0<br>
>>>>>>> for connection in<br>
>>>> core.openflow._connections.values():<br>
>>>>>>> req1 = of.ofp_port_stats_request()<br>
>>>>>>> re1 = of.ofp_stats_request(body = req1)<br>
>>>>>>> connection.send(re1)<br>
>>>>>>><br>
>>>>>>> -----------------------------------<br>
>>>>>>> In the launch() function, I do the following:<br>
>>>>>>> Timer(5, countrequest, recurring = True)<br>
>>>>>>> It reports an error which will not happend to<br>
>>>>>>> ofp_flow_stats_request()<br>
>>>>>>><br>
>>>>>>> Traceback (most recent call last):<br>
>>>>>>> File<br>
>>>> "/home/openflow/pox/pox/lib/recoco/recoco.py", line<br>
>>>> 276, in<br>
>>>>>>> cycle<br>
>>>>>>> rv = t.execute()<br>
>>>>>>> File<br>
>>>> "/home/openflow/pox/pox/lib/recoco/recoco.py", line<br>
>>>> 94, in<br>
>>>>>>> execute<br>
>>>>>>> return self.gen.send(v)<br>
>>>>>>> File<br>
>>>> "/home/openflow/pox/pox/lib/recoco/recoco.py", line<br>
>>>> 751, in<br>
>>>>>>> run<br>
>>>>>>> rv = self._callback(*self._args,**self._kw)<br>
>>>>>>> File "/home/openflow/pox/ext/test1stat.py",<br>
>>>> line 270, in<br>
>>>>>>> countrequest<br>
>>>>>>> connection.send(re1)<br>
>>>>>>> File<br>
>>>> "/home/openflow/pox/pox/openflow/of_01.py", line 573,<br>
>>>> in<br>
>>>>>>> send<br>
>>>>>>> data = data.pack()<br>
>>>>>>> File<br>
>>>> "/home/openflow/pox/pox/openflow/libopenflow_01.py",<br>
>>>> line<br>
>>>>>>> 2136, in pack<br>
>>>>>>> packed += struct.pack("!HH", self.type,<br>
>>>> self.flags)<br>
>>>>>>> error: cannot convert argument to integer<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> Is there anything that I don't do correctly?<br>
>>>>>>><br>
>>>>>>> And my another question is that even assuming I<br>
>>>> can add<br>
>>>>>>> portstatlistener and flowstatlistener as :<br>
>>>>>>><br>
>>>>>>><br>
>>>> core.openflow.addListenerByName("PortStatsReceived",<br>
>>>>>>> statsreceived)<br>
>>>>>>><br>
>>>> core.openflow.addListenerByName("FlowStatsReceived",<br>
>>>>>>> statsreceived)<br>
>>>>>>><br>
>>>>>>> Can I distinguish through statsreceived which<br>
>>>> event is which? Or<br>
>>>>>>> can I combine these two listeners together?<br>
>>>>>>><br>
>>>>>>> Thanks very much.<br>
>>>>>>><br>
>>>>>>> Weiyang<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> 2012/9/19 William Emmanuel Yu <<a href="mailto:wyu@ateneo.edu">wyu@ateneo.edu</a>><br>
>>>>>>> Hi,<br>
>>>>>>><br>
>>>>>>> Attached is a flow_stats.py file that<br>
>>>> contains a sample<br>
>>>>>>> for getting<br>
>>>>>>> stats from all switches connected to the<br>
>>>> controller<br>
>>>>>>> (flow_stats.py).<br>
>>>>>>> Attached is also a file of_json.py (from<br>
>>>> Murphy) which is<br>
>>>>>>> a helper<br>
>>>>>>> library to convert the output into JSON<br>
>>>> format (which is<br>
>>>>>>> much more<br>
>>>>>>> readable than the current classes).<br>
>>>>>>><br>
>>>>>>> Good luck!<br>
>>>>>>><br>
>>>>>>> On Wed, 2012-09-19 at 10:41 -0700,<br>
>>>> Weiyang Mo wrote:<br>
>>>>>>>> Hi, Seungwon,<br>
>>>>>>>><br>
>>>>>>>> Thanks very much.<br>
>>>>>>>><br>
>>>>>>>> Now it works and I can make some<br>
>>>> logical programming to<br>
>>>>>>> do my routing<br>
>>>>>>>> algorithm.<br>
>>>>>>>><br>
>>>>>>>> Best<br>
>>>>>>>><br>
>>>>>>>> Weiyang<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> 2012/9/19 Seungwon Shin<br>
>>>> <<a href="mailto:seungwon.shin@gmail.com">seungwon.shin@gmail.com</a>><br>
>>>>>>>> Hi, Weiyang<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> In the case of collecting the<br>
>>>> statistical<br>
>>>>>>> information for a<br>
>>>>>>>> flow table<br>
>>>>>>>> You can register your listener<br>
>>>> like<br>
>>>>>>>> --><br>
>>>>>>><br>
>>>> core.openflow.addListenerByName("TableStatsReceived",<br>
>>>>>>>> <your handler>)<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> and your handler can parse..<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> def <your handler>(event):<br>
>>>>>>>> for item in event.stats<br>
>>>>>>>> print item.wildcards<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> You can find more information<br>
>>>> by looking at the<br>
>>>>>>> following<br>
>>>>>>>> classes in POX source code<br>
>>>> (libopenflow_01.py)<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> class ofp_flow_stats<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> class ofp_table_stats<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> ….<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> Each class has its __init__<br>
>>>> function, and you<br>
>>>>>>> will find all<br>
>>>>>>>> variables for stats in the<br>
>>>> function.<br>
>>>>>>>> The variables that you are<br>
>>>> looking for should be<br>
>>>>>>> one of them.<br>
>>>>>>>> (E.g., wildcards is an initial<br>
>>>> variable of<br>
>>>>>>> ofp_table_stats<br>
>>>>>>>> class).<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> Best,<br>
>>>>>>>> Seungwon<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> On Sep 19, 2012, at 11:49 AM,<br>
>>>> Weiyang Mo<br>
>>>>>>>> <<a href="mailto:moweiyang1988@gmail.com">moweiyang1988@gmail.com</a>><br>
>>>> wrote:<br>
>>>>>>>><br>
>>>>>>>>> Hi,William,<br>
>>>>>>>>><br>
>>>>>>>>> Thanks for your advice and<br>
>>>> that's what I<br>
>>>>>>> already did. What I<br>
>>>>>>>>> meant is that although I<br>
>>>> sent such request, I<br>
>>>>>>> don't have<br>
>>>>>>>>> ideas how to get the reply<br>
>>>> back. I do<br>
>>>>>>> modifications as<br>
>>>>>>>>> follows in<br>
>>>> forwarding.l2_learning, which sends<br>
>>>>>>> request right<br>
>>>>>>>>> after sending flow entry<br>
>>>> request.<br>
>>>>>>>>><br>
>>>>>>>>> msg =<br>
>>>> of.ofp_flow_mod()<br>
>>>>>>>>> msg.match =<br>
>>>>>>> of.ofp_match.from_packet(packet)<br>
>>>>>>>>><br>
>>>> msg.match.in_port =<br>
>>>>>>> packet_in.in_port<br>
>>>>>>>>> msg.idle_timeout<br>
>>>> = 30<br>
>>>>>>>>> msg.hard_timeout<br>
>>>> = 30<br>
>>>>>>>>><br>
>>>>>>><br>
>>>> msg.actions.append(of.ofp_action_output(port =<br>
>>>>>>>>> out_port))<br>
>>>>>>>>><br>
>>>> self.connection.send(msg)<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>><br>
>>>> "-----------------------------------------------------"<br>
>>>>>>>>> req =<br>
>>>> of.ofp_flow_stats_request()<br>
>>>>>>>>> re =<br>
>>>> of.ofp_stats_request(body =<br>
>>>>>>> req)<br>
>>>>>>>>><br>
>>>> self.connection.send(re)<br>
>>>>>>>>><br>
>>>>>>>>> When I try pinging between<br>
>>>> hosts, it works<br>
>>>>>>> correctly and the<br>
>>>>>>>>> statistics request has been<br>
>>>> sent. The question<br>
>>>>>>> is that the<br>
>>>>>>>>> switches sent "stats reply<br>
>>>> back" to<br>
>>>>>>> controller ( I detect<br>
>>>>>>>>> them through wireshark)<br>
>>>> however from<br>
>>>>>>> controller side, I<br>
>>>>>>>>> don't now how to catch the<br>
>>>> reply packet and<br>
>>>>>>> parse it as I<br>
>>>>>>>>> want.<br>
>>>>>>>>><br>
>>>>>>>>> Any advice?<br>
>>>>>>>>><br>
>>>>>>>>> Thanks very much.<br>
>>>>>>>>><br>
>>>>>>>>> Weiyang<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>> 2012/9/19 William Emmanuel<br>
>>>> Yu <<a href="mailto:wyu@ateneo.edu">wyu@ateneo.edu</a>><br>
>>>>>>>>> Hi Weiyang,<br>
>>>>>>>>><br>
>>>>>>>>> Did you check out<br>
>>>>>>> ofp_flow_stats_request()?<br>
>>>>>>>>><br>
>>>>>>>>> import<br>
>>>> pox.openflow.libopenflow_01 as<br>
>>>>>>> of<br>
>>>>>>>>> fsr =<br>
>>>> of.ofp_flow_stats_request()<br>
>>>>>>>>> sr =<br>
>>>> of.ofp_stats_request(body = fsr)<br>
>>>>>>>>> switch.send(sr)<br>
>>>>>>>>><br>
>>>>>>>>> Check out:<br>
>>>>>>>>><br>
>>>>>>><br>
>>>> <a href="https://groups.google.com/forum/?fromgroups=#" target="_blank">https://groups.google.com/forum/?fromgroups=#</a>!<br>
>>>>>>>>><br>
>>>> topic/pox_dev/sSlfqm5Okls<br>
>>>>>>>>><br>
>>>>>>>>> Good luck!<br>
>>>>>>>>><br>
>>>>>>>>> On Tue, 2012-09-18<br>
>>>> at 08:21 -0700,<br>
>>>>>>> Weiyang Mo wrote:<br>
>>>>>>>>>> Hi,All,<br>
>>>>>>>>>><br>
>>>>>>>>>> I try to use<br>
>>>> packet counts from<br>
>>>>>>> switches within a<br>
>>>>>>>>> time period (e.g<br>
>>>>>>>>>> 10secs) to do some<br>
>>>> routing. In the<br>
>>>>>>> documentation<br>
>>>>>>>>>><br>
>>>>>>><br>
>>>> <a href="https://openflow.stanford.edu/display/ONL/POX" target="_blank">https://openflow.stanford.edu/display/ONL/POX</a><br>
>>>>>>>>><br>
>>>>>>>>>><br>
>>>> +Wiki#POXWiki-StatisticEvent it<br>
>>>>>>> mentions that it's<br>
>>>>>>>>> possible to do this<br>
>>>>>>>>>> using a timer. I<br>
>>>> guess using 'time<br>
>>>>>>> to wake' to<br>
>>>>>>>>> call a counting<br>
>>>>>>>>>> function may help.<br>
>>>>>>>>>><br>
>>>>>>>>>> However I'm not<br>
>>>> famiiar with getting<br>
>>>>>>> statistics<br>
>>>>>>>>> from a switch. More<br>
>>>>>>>>>> than one flow, I<br>
>>>> want to get total<br>
>>>>>>> packet counts<br>
>>>>>>>>> within 10 seconds<br>
>>>>>>>>>> from all flow<br>
>>>> entries. Could you<br>
>>>>>>> please help to<br>
>>>>>>>>> give me a simple<br>
>>>>>>>>>> examples about<br>
>>>> this?<br>
>>>>>>>>>><br>
>>>>>>>>>> Thanks very much.<br>
>>>>>>>>>><br>
>>>>>>>>>> Best<br>
>>>>>>>>>><br>
>>>>>>>>>> Weiyang<br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>> --<br>
>>>>>>>>><br>
>>>>>>><br>
>>>> -------------------------------------------------------<br>
>>>>>>>>> William Emmanuel S.<br>
>>>> Yu, Ph.D. (杨怀义)<br>
>>>>>>>>> Department of<br>
>>>> Information Systems and<br>
>>>>>>> Computer<br>
>>>>>>>>> Science<br>
>>>>>>>>> Ateneo de Manila<br>
>>>> University<br>
>>>>>>>>> email : wyu at<br>
>>>> ateneo dot edu<br>
>>>>>>>>> blog :<br>
>>>> <a href="http://hip2b2.yutivo.org/" target="_blank">http://hip2b2.yutivo.org/</a><br>
>>>>>>>>> web :<br>
>>>>>>> <a href="http://CNG.ateneo.edu/cng/wyu/" target="_blank">http://CNG.ateneo.edu/cng/wyu/</a><br>
>>>>>>>>> phone :<br>
>>>> <a href="tel:%2B63%282%294266001" value="+6324266001">+63(2)4266001</a> loc. 4186<br>
>>>>>>>>> GPG :<br>
>>>>>>> <a href="http://CNG.ateneo.net/cng/wyu/wyy.pgp" target="_blank">http://CNG.ateneo.net/cng/wyu/wyy.pgp</a><br>
>>>>>>>>><br>
>>>>>>>>> Confidentiality<br>
>>>> Issue: This message<br>
>>>>>>> is intended<br>
>>>>>>>>> only for the use of<br>
>>>> the<br>
>>>>>>>>> addressee and may<br>
>>>> contain information<br>
>>>>>>> that is<br>
>>>>>>>>> privileged and<br>
>>>>>>>>> confidential. If you<br>
>>>> are not the<br>
>>>>>>> intended recipient,<br>
>>>>>>>>> you are hereby<br>
>>>>>>>>> notified that any<br>
>>>> use or dissemination<br>
>>>>>>> of this<br>
>>>>>>>>> communication is<br>
>>>> strictly<br>
>>>>>>>>> prohibited. If you<br>
>>>> have received this<br>
>>>>>>> communication<br>
>>>>>>>>> in error, please<br>
>>>>>>>>> notify us<br>
>>>> immediately by reply and<br>
>>>>>>> delete this<br>
>>>>>>>>> message from your<br>
>>>> system.<br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>><br>
>>>>>>> --<br>
>>>>>>><br>
>>>> -------------------------------------------------------<br>
>>>>>>> William Emmanuel S. Yu, Ph.D. (杨怀义)<br>
>>>>>>> Department of Information Systems and<br>
>>>> Computer Science<br>
>>>>>>> Ateneo de Manila University<br>
>>>>>>> email : wyu at ateneo dot edu<br>
>>>>>>> blog : <a href="http://hip2b2.yutivo.org/" target="_blank">http://hip2b2.yutivo.org/</a><br>
>>>>>>> web : <a href="http://CNG.ateneo.edu/cng/wyu/" target="_blank">http://CNG.ateneo.edu/cng/wyu/</a><br>
>>>>>>> phone : <a href="tel:%2B63%282%294266001" value="+6324266001">+63(2)4266001</a> loc. 4186<br>
>>>>>>> GPG :<br>
>>>> <a href="http://CNG.ateneo.net/cng/wyu/wyy.pgp" target="_blank">http://CNG.ateneo.net/cng/wyu/wyy.pgp</a><br>
>>>>>>><br>
>>>>>>> Confidentiality Issue: This message is<br>
>>>> intended only for<br>
>>>>>>> the use of the<br>
>>>>>>> addressee and may contain information<br>
>>>> that is privileged<br>
>>>>>>> and<br>
>>>>>>> confidential. If you are not the<br>
>>>> intended recipient, you<br>
>>>>>>> are hereby<br>
>>>>>>> notified that any use or dissemination<br>
>>>> of this<br>
>>>>>>> communication is strictly<br>
>>>>>>> prohibited. If you have received this<br>
>>>> communication in<br>
>>>>>>> error, please<br>
>>>>>>> notify us immediately by reply and<br>
>>>> delete this message<br>
>>>>>>> from your system.<br>
>>>>>>><br>
>>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>><br>
>>>> --<br>
>>>> -------------------------------------------------------<br>
>>>> William Emmanuel S. Yu, Ph.D. (杨怀义)<br>
>>>> Department of Information Systems and Computer Science<br>
>>>> Ateneo de Manila University<br>
>>>> email : wyu at ateneo dot edu<br>
>>>> blog : <a href="http://hip2b2.yutivo.org/" target="_blank">http://hip2b2.yutivo.org/</a><br>
>>>> web : <a href="http://CNG.ateneo.edu/cng/wyu/" target="_blank">http://CNG.ateneo.edu/cng/wyu/</a><br>
>>>> phone : <a href="tel:%2B63%282%294266001" value="+6324266001">+63(2)4266001</a> loc. 4186<br>
>>>> GPG : <a href="http://CNG.ateneo.net/cng/wyu/wyy.pgp" target="_blank">http://CNG.ateneo.net/cng/wyu/wyy.pgp</a><br>
>>>><br>
>>>> Confidentiality Issue: This message is intended only<br>
>>>> for the use of the<br>
>>>> addressee and may contain information that is<br>
>>>> privileged and<br>
>>>> confidential. If you are not the intended recipient,<br>
>>>> you are hereby<br>
>>>> notified that any use or dissemination of this<br>
>>>> communication is strictly<br>
>>>> prohibited. If you have received this communication<br>
>>>> in error, please<br>
>>>> notify us immediately by reply and delete this message<br>
>>>> from your system.<br>
>>>><br>
>>>><br>
>>>><br>
>>><br>
>>> --<br>
>>> -------------------------------------------------------<br>
>>> William Emmanuel S. Yu, Ph.D. (杨怀义)<br>
>>> Department of Information Systems and Computer Science<br>
>>> Ateneo de Manila University<br>
>>> email : wyu at ateneo dot edu<br>
>>> blog : <a href="http://hip2b2.yutivo.org/" target="_blank">http://hip2b2.yutivo.org/</a><br>
>>> web : <a href="http://CNG.ateneo.edu/cng/wyu/" target="_blank">http://CNG.ateneo.edu/cng/wyu/</a><br>
>>> phone : <a href="tel:%2B63%282%294266001" value="+6324266001">+63(2)4266001</a> loc. 4186<br>
>>> GPG : <a href="http://CNG.ateneo.net/cng/wyu/wyy.pgp" target="_blank">http://CNG.ateneo.net/cng/wyu/wyy.pgp</a><br>
>>><br>
>>> Confidentiality Issue: This message is intended only for the use of the<br>
>>> addressee and may contain information that is privileged and<br>
>>> confidential. If you are not the intended recipient, you are hereby<br>
>>> notified that any use or dissemination of this communication is strictly<br>
>>> prohibited. If you have received this communication in error, please<br>
>>> notify us immediately by reply and delete this message from your system.<br>
>>><br>
>><br>
><br>
> --<br>
> -------------------------------------------------------<br>
> William Emmanuel S. Yu, Ph.D. (杨怀义)<br>
> Department of Information Systems and Computer Science<br>
> Ateneo de Manila University<br>
> email : wyu at ateneo dot edu<br>
> blog : <a href="http://hip2b2.yutivo.org/" target="_blank">http://hip2b2.yutivo.org/</a><br>
> web : <a href="http://CNG.ateneo.edu/cng/wyu/" target="_blank">http://CNG.ateneo.edu/cng/wyu/</a><br>
> phone : <a href="tel:%2B63%282%294266001" value="+6324266001">+63(2)4266001</a> loc. 4186<br>
> GPG : <a href="http://CNG.ateneo.net/cng/wyu/wyy.pgp" target="_blank">http://CNG.ateneo.net/cng/wyu/wyy.pgp</a><br>
><br>
> Confidentiality Issue: This message is intended only for the use of the<br>
> addressee and may contain information that is privileged and<br>
> confidential. If you are not the intended recipient, you are hereby<br>
> notified that any use or dissemination of this communication is strictly<br>
> prohibited. If you have received this communication in error, please<br>
> notify us immediately by reply and delete this message from your system.<br>
><br>
<br>
</div></div></blockquote></div><br>
</blockquote></div><br></div></body></html>