SlideShare a Scribd company logo
1 of 39
NCTU P4 Workshop
Tseng Yi
NCTU W2CNLab
https://takeshi.tw/tag/p4/
1
Outline
• Introduction
• Architecture
• Header and Parser
• Action and Table
• Control flow
• Register, Metadata, Counter and Meter
• Getting start
2
Introduction
• Programming Protocol-Independent Packet
Processors.
• Describe how to handle a packet for a target.
• White box in white box.
3
Introduction
• Protocol Independent
• P4 programs specify how a switch processes packets.
• Target Independent
• P4 is suitable for describing everything from high-
performance forwarding ASICs to software switches.
• Field Reconfigurable
• P4 allows network engineers to change the way their
switches process packets after they are deployed.
P4 is not
• SDN Software Switch
• OpenFlow or Protocol
• Network abstraction
• Won’t compile to OpenFlow or any southbound
message.
5
P4 can
But OpenFlow Switch can’t
• Parse or modify L5~ header (e.g. inner ethernet
header from VXLAN, DNS query data, DHCP
header…)
• Define new protocol parser
• Stateful switch (need newest version of OvS or
modified OF switch)
• Flexible match field and table size of any table.
• Define new actions for tables.
6
Architecture
Headers
Parsers
Control
Program
Table
Config
Packet
Input
Parser Tables Tables
Queues
and/or
Buffers
Ingress Egress
7
Deployment host
P4 Target
How to write P4?
1. Define headers and parsers (parser graph)
2. Define actions, match fields for table.
3. Design a control flow for your target.
8
P4 spec v1.0.2
http://p4.org/wp-content/uploads/2015/04/p4-latest.pdf
9
Header
• Like “struct” from C/C++, but more flexible.
header_type eth_t {
fields {
dst : 48;
src : 48;
ethType : 16;
}
}
header eth_t eth;
10
Parser
• Parse(extract) a packet step by step.
• Eth ————> IPv4 ———>TCP
parser parser_eth {
extract(eth);
return select(eth.type) {
0x800: parser_ipv4;
default: ingress;
}
}
parser parser_ipv4 {
extract(ipv4);
return select(latest.proto) {
6: parser_tcp;
default: ingress;
}
}
11
type 0x0800 proto 6
Actions
• Like a function(but no return value).
• In one function, you can use one or more P4 API
(e.g. modify_field, add_header…)
• Can be executed in parallel (depends on
implementation of target)
12
action set_dst_mac_and_output(new_mac, outport) {
modify_field(eth.dst, new_mac);
modify_field(standard_metadata.egress_spec, outport)
}
• For example, if we want to set destination mac
address and output port.
Actions
13
Table
• Every table might contains different match field and actions.
• Each table might have different features
• Not just P4, Some vendors slice tables for different purpose, for example:
OFDPA from Broadcom
Table definition
table first_table {
reads {
ipv4.dst : lpm; // exact, lpm, ternary, range, valid
}
actions {
drop;
set_dst_mac_and_output;
}
size 1024;
}
Add one Flow Entry
• Currently, ways to control a P4 target (bmv2):
• Use runtime command line interface
• ONOS test app for bmv2
p4cli> table_add first_table set_dst_mac_and_output
10.0.0.0/24 => 00:00:00:00:00:01 1
Control flow
• Also like a function, but no argument or return value
• Main control flow: ingress and egress
• In control flow, you can:
• apply packet to specific tables
• go to other control flows
• When ingress ends, data will be sent to queue or
buffer, then handle by egress control flow.
Control flow
• Ingress:
• Modify state (register)
• Modify packet
• Modify metadata
• Modify egress_spec (e.g. queue, output port)
• Egress:
• Modify packet
Control Flow
control ingress {
apply(in_port);
apply(vlan);
apply(termination_mac):
if(valid(ipv4)) {
apply(l3_flow);
}
apply(unicast);
apply(multicast);
apply(bridging);
apply(acl);
}
Register & Metadata
Counter & Meter
Register, Metadata
• Register
• Like global variable, store data
• Can be use for stateful dataplane design
• Metadata
• Like local variable, reset after one control flow ended.
• If we need to use register, we need to load register to
metadata.
Counter
• Counter
• Count bytes or packets
• Update when table match or action call
• Fixed size, will stop counting or reset to zero
(depends on program)
Meter
• Like counter, but it monitoring packet rate, not
packet/byte count.
Getting start
Getting start
• Basic knowledge:
• Linux shell (network & system commands)
• Linux basic tools (git, tmux…)
• GNU compiler toolchain (for bmv2)
• Python & C/C++
• FSM, data structure, network
Getting start
• Setup env:
• bmv2
• https://github.com/p4lang/behavioral-model
• p4c-bm
• https://github.com/p4lang/p4c-bm
• editor plugins (optional)
• https://github.com/TakeshiTseng/atom-language-p4
• https://github.com/TakeshiTseng/vim-language-p4
Workflow(bmv2)
• Write P4 program
• Generate json file by using p4c-bmv2
• Use json to start a bmv2 target (e.g.
simple_switch)
Use mininet
• from p4_mininet import P4Switch, P4Host
• Setup cls parameter for addSwitch and addHost.
Use mininet
• net.addSwitch('s1', cls=P4Switch,
sw_path=SW_PATH, json_path=JSON_PATH,
thrift_port=9091)
• sw_path: bmv2 target path
• json_path: json file generated by p4c-bm
• thrift_port: port number for runtime API
P4 thrift API
• Connect bmv2 target and runtime CLI or
Conroller (e.g. ONOS)
• You can use runtime_CLI.py from bmv2
repository.
Quick Demo
https://github.com/TakeshiTseng/2016-nctu-p4-workshop
Quick Demo
• Goal:
• Use new protocol instead of ethernet.
• Path routing.
• Setup by runtime CLI.
Normal packet With path header
src (16 bit)
dst (16 bit)
payload normal packet
path (16 bit)
preamble (24 bit)
start
Ingress control
pkt[0:24] != 0xc0ffee
pkt[0:24] == 0xc0ffee
my_path_header
my_header
Parser
apply “forward”
apply “path_look_up”
Egress
path is not valid
path header is valid
Demo topology
P4
Switch
1
Host 3 Host 4
P4
Switch
2
P4
Switch
3
P4
Switch
4
Host 1 Host 2
Number of path : P(4, 2) = 12
00 02 02
00 02 02
1
1
1
1
Quick Demo
Software Defined Networking Developer Society
• http://sdnds.tw
• https://www.facebook.com/groups/sdnds.tw
Thanks!
Question?

More Related Content

What's hot

CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
IO Visor Project
 

What's hot (20)

Compiling P4 to XDP, IOVISOR Summit 2017
Compiling P4 to XDP, IOVISOR Summit 2017Compiling P4 to XDP, IOVISOR Summit 2017
Compiling P4 to XDP, IOVISOR Summit 2017
 
Stacks and Layers: Integrating P4, C, OVS and OpenStack
Stacks and Layers: Integrating P4, C, OVS and OpenStackStacks and Layers: Integrating P4, C, OVS and OpenStack
Stacks and Layers: Integrating P4, C, OVS and OpenStack
 
Network Measurement with P4 and C on Netronome Agilio
Network Measurement with P4 and C on Netronome AgilioNetwork Measurement with P4 and C on Netronome Agilio
Network Measurement with P4 and C on Netronome Agilio
 
P4-based VNF and Micro-VNF Chaining for Servers With Intelligent Server Adapters
P4-based VNF and Micro-VNF Chaining for Servers With Intelligent Server AdaptersP4-based VNF and Micro-VNF Chaining for Servers With Intelligent Server Adapters
P4-based VNF and Micro-VNF Chaining for Servers With Intelligent Server Adapters
 
Transparent eBPF Offload: Playing Nice with the Linux Kernel
Transparent eBPF Offload: Playing Nice with the Linux KernelTransparent eBPF Offload: Playing Nice with the Linux Kernel
Transparent eBPF Offload: Playing Nice with the Linux Kernel
 
Protocol Independence
Protocol IndependenceProtocol Independence
Protocol Independence
 
Networking and Go: An Epic Journey
Networking and Go: An Epic JourneyNetworking and Go: An Epic Journey
Networking and Go: An Epic Journey
 
Measuring a 25 and 40Gb/s Data Plane
Measuring a 25 and 40Gb/s Data PlaneMeasuring a 25 and 40Gb/s Data Plane
Measuring a 25 and 40Gb/s Data Plane
 
Ebpf ovsconf-2016
Ebpf ovsconf-2016Ebpf ovsconf-2016
Ebpf ovsconf-2016
 
Cilium - Fast IPv6 Container Networking with BPF and XDP
Cilium - Fast IPv6 Container Networking with BPF and XDPCilium - Fast IPv6 Container Networking with BPF and XDP
Cilium - Fast IPv6 Container Networking with BPF and XDP
 
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RCThe Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
 
CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016] CETH for XDP [Linux Meetup Santa Clara | July 2016]
CETH for XDP [Linux Meetup Santa Clara | July 2016]
 
Consensus as a Network Service
Consensus as a Network ServiceConsensus as a Network Service
Consensus as a Network Service
 
Programmable data plane at terabit speeds
Programmable data plane at terabit speedsProgrammable data plane at terabit speeds
Programmable data plane at terabit speeds
 
LinuxCon 2015 Stateful NAT with OVS
LinuxCon 2015 Stateful NAT with OVSLinuxCon 2015 Stateful NAT with OVS
LinuxCon 2015 Stateful NAT with OVS
 
Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)
Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)
Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)
 
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationBKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
 
P4 Introduction
P4 Introduction P4 Introduction
P4 Introduction
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking Walkthrough
 

Viewers also liked

Viewers also liked (20)

ONOS intent introduction
ONOS intent introductionONOS intent introduction
ONOS intent introduction
 
NSCTF
NSCTFNSCTF
NSCTF
 
Ryu dynamic loader
Ryu dynamic loaderRyu dynamic loader
Ryu dynamic loader
 
P4: Programming Protocol-Independent Packet Processor
P4: Programming Protocol-Independent Packet ProcessorP4: Programming Protocol-Independent Packet Processor
P4: Programming Protocol-Independent Packet Processor
 
Ryu SDN-IP
Ryu SDN-IPRyu SDN-IP
Ryu SDN-IP
 
音樂劇 羅密歐與茱麗葉 Musical - Roméo et Juliette
音樂劇 羅密歐與茱麗葉 Musical - Roméo et Juliette音樂劇 羅密歐與茱麗葉 Musical - Roméo et Juliette
音樂劇 羅密歐與茱麗葉 Musical - Roméo et Juliette
 
20161119 SDNDS-TW Meetup
20161119 SDNDS-TW Meetup20161119 SDNDS-TW Meetup
20161119 SDNDS-TW Meetup
 
Extending Network Virtualization into the Optical Domain
Extending Network Virtualization into the Optical DomainExtending Network Virtualization into the Optical Domain
Extending Network Virtualization into the Optical Domain
 
2015 COSCUP SDN Workshop -- SDN Quick Start
2015 COSCUP SDN Workshop -- SDN Quick Start2015 COSCUP SDN Workshop -- SDN Quick Start
2015 COSCUP SDN Workshop -- SDN Quick Start
 
Blackholing from a_providers_perspektive_theo_voss
Blackholing from a_providers_perspektive_theo_vossBlackholing from a_providers_perspektive_theo_voss
Blackholing from a_providers_perspektive_theo_voss
 
Jon Nield FastNetMon
Jon Nield FastNetMonJon Nield FastNetMon
Jon Nield FastNetMon
 
Detecting and mitigating DDoS ZenDesk by Vicente De Luca
Detecting and mitigating DDoS ZenDesk by Vicente De LucaDetecting and mitigating DDoS ZenDesk by Vicente De Luca
Detecting and mitigating DDoS ZenDesk by Vicente De Luca
 
2016 COSCUP SDN Introduction
2016 COSCUP SDN Introduction2016 COSCUP SDN Introduction
2016 COSCUP SDN Introduction
 
Janog 39: speech about FastNetMon by Yutaka Ishizaki
Janog 39: speech about FastNetMon by Yutaka IshizakiJanog 39: speech about FastNetMon by Yutaka Ishizaki
Janog 39: speech about FastNetMon by Yutaka Ishizaki
 
2016 COSCUP ONOS
2016 COSCUP ONOS2016 COSCUP ONOS
2016 COSCUP ONOS
 
GoBGP : yet another OSS BGPd
GoBGP : yet another OSS BGPdGoBGP : yet another OSS BGPd
GoBGP : yet another OSS BGPd
 
SDN-IP Peering using BGP
SDN-IP Peering using BGPSDN-IP Peering using BGP
SDN-IP Peering using BGP
 
9534715
95347159534715
9534715
 
03 estrategia-ddos
03 estrategia-ddos03 estrategia-ddos
03 estrategia-ddos
 
Ultra fast DDoS Detection with FastNetMon at Coloclue (AS 8283)
Ultra	fast	DDoS Detection	with	FastNetMon at	 Coloclue	(AS	8283)Ultra	fast	DDoS Detection	with	FastNetMon at	 Coloclue	(AS	8283)
Ultra fast DDoS Detection with FastNetMon at Coloclue (AS 8283)
 

Similar to 2016 NCTU P4 Workshop

COUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_FeaturesCOUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_Features
Alfredo Abate
 
Serving Deep Learning Models At Scale With RedisAI: Luca Antiga
Serving Deep Learning Models At Scale With RedisAI: Luca AntigaServing Deep Learning Models At Scale With RedisAI: Luca Antiga
Serving Deep Learning Models At Scale With RedisAI: Luca Antiga
Redis Labs
 
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CanSecWest
 

Similar to 2016 NCTU P4 Workshop (20)

Rina p4 rina workshop
Rina p4   rina workshopRina p4   rina workshop
Rina p4 rina workshop
 
Apache Hadoop MapReduce Tutorial
Apache Hadoop MapReduce TutorialApache Hadoop MapReduce Tutorial
Apache Hadoop MapReduce Tutorial
 
COUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_FeaturesCOUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_Features
 
Parallel program design
Parallel program designParallel program design
Parallel program design
 
Apache Big Data 2016: Next Gen Big Data Analytics with Apache Apex
Apache Big Data 2016: Next Gen Big Data Analytics with Apache ApexApache Big Data 2016: Next Gen Big Data Analytics with Apache Apex
Apache Big Data 2016: Next Gen Big Data Analytics with Apache Apex
 
Intro to HPC
Intro to HPCIntro to HPC
Intro to HPC
 
How to make data available for analytics ASAP
How to make data available for analytics ASAPHow to make data available for analytics ASAP
How to make data available for analytics ASAP
 
newerahpc grid
newerahpc gridnewerahpc grid
newerahpc grid
 
Create C++ Applications with the Persistent Memory Development Kit
Create C++ Applications with the Persistent Memory Development KitCreate C++ Applications with the Persistent Memory Development Kit
Create C++ Applications with the Persistent Memory Development Kit
 
Exploiting GPU's for Columnar DataFrrames by Kiran Lonikar
Exploiting GPU's for Columnar DataFrrames by Kiran LonikarExploiting GPU's for Columnar DataFrrames by Kiran Lonikar
Exploiting GPU's for Columnar DataFrrames by Kiran Lonikar
 
Hadoop and HBase experiences in perf log project
Hadoop and HBase experiences in perf log projectHadoop and HBase experiences in perf log project
Hadoop and HBase experiences in perf log project
 
Intro to Apache Apex - Next Gen Platform for Ingest and Transform
Intro to Apache Apex - Next Gen Platform for Ingest and TransformIntro to Apache Apex - Next Gen Platform for Ingest and Transform
Intro to Apache Apex - Next Gen Platform for Ingest and Transform
 
lect13_programmable_dp.pptx
lect13_programmable_dp.pptxlect13_programmable_dp.pptx
lect13_programmable_dp.pptx
 
Serving Deep Learning Models At Scale With RedisAI: Luca Antiga
Serving Deep Learning Models At Scale With RedisAI: Luca AntigaServing Deep Learning Models At Scale With RedisAI: Luca Antiga
Serving Deep Learning Models At Scale With RedisAI: Luca Antiga
 
(Open) MPI, Parallel Computing, Life, the Universe, and Everything
(Open) MPI, Parallel Computing, Life, the Universe, and Everything(Open) MPI, Parallel Computing, Life, the Universe, and Everything
(Open) MPI, Parallel Computing, Life, the Universe, and Everything
 
200519 TMU Ubiquitous Robot
200519 TMU Ubiquitous Robot200519 TMU Ubiquitous Robot
200519 TMU Ubiquitous Robot
 
Presentations from the Cloudera Impala meetup on Aug 20 2013
Presentations from the Cloudera Impala meetup on Aug 20 2013Presentations from the Cloudera Impala meetup on Aug 20 2013
Presentations from the Cloudera Impala meetup on Aug 20 2013
 
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
CSW2017Richard Johnson_harnessing intel processor trace on windows for vulner...
 
Informix Data Streaming Overview
Informix Data Streaming OverviewInformix Data Streaming Overview
Informix Data Streaming Overview
 
Quantifying Container Runtime Performance: OSCON 2017 Open Container Day
Quantifying Container Runtime Performance: OSCON 2017 Open Container DayQuantifying Container Runtime Performance: OSCON 2017 Open Container Day
Quantifying Container Runtime Performance: OSCON 2017 Open Container Day
 

Recently uploaded

Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
 
Gardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch LetterGardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch Letter
MateoGardella
 
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfAn Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdf
SanaAli374401
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 

Recently uploaded (20)

How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Gardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch LetterGardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch Letter
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfAn Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
psychiatric nursing HISTORY COLLECTION .docx
psychiatric  nursing HISTORY  COLLECTION  .docxpsychiatric  nursing HISTORY  COLLECTION  .docx
psychiatric nursing HISTORY COLLECTION .docx
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 

2016 NCTU P4 Workshop

Editor's Notes

  1. Permutation