OpenFlow controller programmer does not have any method to confirm how reflected their code to the flow control, directly and intuitively
“This code, how does work on... which flow?”
“This flow, which code does make it?”
This slides shows the basic design of the mechanism for binding code and flow to see them.
It enables cross referencing logic and flow each other and also enable tracing the flow over switches.
It had been presented at the 16th IOT conference of IPSJ, March 2012.
Eric Lafortune - ProGuard and DexGuard for optimization and protectionGuardSquare
ProGuard and DexGuard are tools that optimize and obfuscate Android applications. ProGuard can shrink code size by 20-90% and improve performance by up to 20% through techniques like dead code elimination, constant propagation, and method inlining. It also protects applications from reverse engineering by obfuscating symbols through renaming and eliminating unused code and resources.
The document discusses property-based testing and how it can be used to test code more effectively than example-based testing. It introduces the concepts of testing properties like commutativity, associativity, and identity to specify requirements at a deeper level. QuickCheck is presented as a tool that generates random test values to check properties, finding bugs more quickly than testing by hand. JUnit Quickcheck and JSVerify are given as libraries for implementing property tests in Java and JavaScript. Potential applications of property testing like testing SDKs and data processing frameworks are outlined.
ITT 2014 - Eric Lafortune - ProGuard, Optimizer and Obfuscator in the Android...Istanbul Tech Talks
Eric presents ProGuard - the open-source optimizer and obfuscator that is integrated in the Android SDK. ProGuard reduces the size of applications, improves their performance, and makes them more difficult to reverse-engineer. Eric presents some typical results on what to expect from ProGuard, discuss the latest developments and provide some background that should help mobile developers get the best out of ProGuard.
The document discusses code and data sharing in operating systems. It explains that sharing allows multiple processes to access a single copy of code or data in memory, reducing memory usage. This is implemented through techniques like static and dynamic linking, where processes can call and use shared code and data segments. The document provides an example of simple code sharing between two processes that call and access the same AddMul2 function.
Eric Lafortune - ProGuard: Optimizer and obfuscator in the Android SDKGuardSquare
This document summarizes the presentation on ProGuard by Eric Lafortune at the #mceconf conference on January 11, 2014. ProGuard is an optimizer and obfuscator tool included in the Android SDK. It shrinks, optimizes, and obfuscates Android applications bytecode. Using ProGuard can significantly reduce application sizes and improve performance. It removes unused code, performs optimizations at the bytecode level, and obfuscates the code to make reverse engineering more difficult. The document provides examples of how ProGuard can reduce application sizes by 20-90%, improve performance by up to 20%, and demonstrates optimizations like inlining, constant propagation, and enum handling. It also explains how to configure and enable ProGuard in Android builds
The document discusses debugging techniques for finding and removing logical errors from programs. It describes common debugging techniques like print statements, core dump analysis, and execution monitoring. It then demonstrates how to use a debugger called DDD with a sample C program, including how to set breakpoints and conditional breakpoints to pause execution under certain conditions. The document stresses that prevention through writing clear, simple code is better than debugging, and provides some tips to aim for simplicity.
Elixir -Tolerância a Falhas para Adultos - GDG CampinasFabio Akita
Tolerância a Falhas para Adultos is a document about Elixir and distributed processing in 3 sentences or less:
It discusses concepts in Elixir like processes, message passing, and supervision trees to provide fault tolerance. It also covers distributing processing using libraries like Flow to partition and process large datasets across multiple nodes. The document provides an overview of key Elixir concepts for building distributed and fault tolerant applications.
Eric Lafortune - ProGuard and DexGuard for optimization and protectionGuardSquare
ProGuard and DexGuard are tools that optimize and obfuscate Android applications. ProGuard can shrink code size by 20-90% and improve performance by up to 20% through techniques like dead code elimination, constant propagation, and method inlining. It also protects applications from reverse engineering by obfuscating symbols through renaming and eliminating unused code and resources.
The document discusses property-based testing and how it can be used to test code more effectively than example-based testing. It introduces the concepts of testing properties like commutativity, associativity, and identity to specify requirements at a deeper level. QuickCheck is presented as a tool that generates random test values to check properties, finding bugs more quickly than testing by hand. JUnit Quickcheck and JSVerify are given as libraries for implementing property tests in Java and JavaScript. Potential applications of property testing like testing SDKs and data processing frameworks are outlined.
ITT 2014 - Eric Lafortune - ProGuard, Optimizer and Obfuscator in the Android...Istanbul Tech Talks
Eric presents ProGuard - the open-source optimizer and obfuscator that is integrated in the Android SDK. ProGuard reduces the size of applications, improves their performance, and makes them more difficult to reverse-engineer. Eric presents some typical results on what to expect from ProGuard, discuss the latest developments and provide some background that should help mobile developers get the best out of ProGuard.
The document discusses code and data sharing in operating systems. It explains that sharing allows multiple processes to access a single copy of code or data in memory, reducing memory usage. This is implemented through techniques like static and dynamic linking, where processes can call and use shared code and data segments. The document provides an example of simple code sharing between two processes that call and access the same AddMul2 function.
Eric Lafortune - ProGuard: Optimizer and obfuscator in the Android SDKGuardSquare
This document summarizes the presentation on ProGuard by Eric Lafortune at the #mceconf conference on January 11, 2014. ProGuard is an optimizer and obfuscator tool included in the Android SDK. It shrinks, optimizes, and obfuscates Android applications bytecode. Using ProGuard can significantly reduce application sizes and improve performance. It removes unused code, performs optimizations at the bytecode level, and obfuscates the code to make reverse engineering more difficult. The document provides examples of how ProGuard can reduce application sizes by 20-90%, improve performance by up to 20%, and demonstrates optimizations like inlining, constant propagation, and enum handling. It also explains how to configure and enable ProGuard in Android builds
The document discusses debugging techniques for finding and removing logical errors from programs. It describes common debugging techniques like print statements, core dump analysis, and execution monitoring. It then demonstrates how to use a debugger called DDD with a sample C program, including how to set breakpoints and conditional breakpoints to pause execution under certain conditions. The document stresses that prevention through writing clear, simple code is better than debugging, and provides some tips to aim for simplicity.
Elixir -Tolerância a Falhas para Adultos - GDG CampinasFabio Akita
Tolerância a Falhas para Adultos is a document about Elixir and distributed processing in 3 sentences or less:
It discusses concepts in Elixir like processes, message passing, and supervision trees to provide fault tolerance. It also covers distributing processing using libraries like Flow to partition and process large datasets across multiple nodes. The document provides an overview of key Elixir concepts for building distributed and fault tolerant applications.
Rs. 750/-
Balcony Rs. 500/-
1) The document describes 10 programming experiments involving Java concepts like variables, data types, control structures, methods, classes, arrays, file handling etc.
2) The experiments involve developing applications like a calculator, compound interest calculator, transport charge calculator, pattern generator, digit sum calculator, prime number generator, e-learning application, list box application, billing application with radio buttons, and a movie ticket booking system.
3) Each experiment provides the objective, task to be completed, sample interface, and the Java code with methods required to develop the given application.
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov Elixir Club
The document discusses clustering in Erlang and Elixir. It defines a cluster as a set of connected computers that work together. It describes different types of clusters and how to start nodes, connect nodes, send messages between nodes, and call functions remotely. It provides examples of monitoring nodes, pinging nodes, and getting node names. Distributed nodes running on different hosts can be connected by configuring /etc/hosts and ~/.hosts.erlang. Libraries like bitwalker/swarm and bitwalker/libcluster can help with clustering worker processes.
This document provides an overview and introduction to CoffeeScript, a programming language that compiles to JavaScript. It shows how CoffeeScript code compiles to equivalent JavaScript code, and demonstrates CoffeeScript features like functions, classes, and object-oriented programming. The document introduces CoffeeScript syntax for arrays, objects, loops, and functions, and compares syntax to JavaScript. It also covers CoffeeScript concepts like scoping, context, and class-based object-oriented programming using prototypes.
This document describes techniques for creating rootkits on Linux x86 systems. It discusses obtaining the system call table, hooking system calls through various methods like direct modification of the table, inline hooking of system call code, and patching the system call handler. It also presents the idea of abusing debug registers to generate exceptions and intercept system calls. The goal is to conceal running processes, files, and other system data from detection.
This document provides a summary of a presentation on object-oriented programming (OOP) and clean code given at IPB Computer Science on March 28, 2017. It introduces the speaker, Ifnu Bima, and his background working at Deutsche Bank and blibli.com. The presentation covers topics like code quality metrics, meaningful naming conventions, high-quality functions, comments, and unit testing. It emphasizes writing code that is easy to maintain and modify over time to prevent issues like bugs and technical debt.
1. The document describes a hospital management project created in Java to keep records of patients' information like BP, weight, case number, etc. and allow printing prescriptions and bills.
2. It includes coding for a splash screen, login frame, two admin forms for adding/deleting users, and frames for registering new patients, deleting patient accounts, and viewing pending patients.
3. The coding connects to a Java database, implements prepared statements to query and update tables storing user passwords and patient data, and uses various Swing components like text fields and buttons.
Pointer variables store memory addresses and can be used to indirectly access other variables. Pointers allow values to be passed by reference into functions rather than by value. Arrays can be accessed using pointers by treating the array name as a pointer to its first element. Dynamic memory allocation with new/delete operators allows pointers to reference variables in heap memory.
The document discusses input and output statements in C++. It explains that the iostream library includes cout and cin for standard output and input. cout uses the insertion operator << to output data to the screen, while cin uses the extraction operator >> to input data from the keyboard. The document provides examples of using cout and cin to output text, numbers, and calculate values from user input.
The document discusses coroutines in Python. It describes how coroutines can have multiple entry points using the await keyword, and how the Python interpreter suspends and resumes coroutine execution. It also provides an example coroutine program that defines two coroutines that print messages before and after sleeping for different durations. The document then analyzes the coroutine execution using the inspect module and disassembler to illustrate how coroutine frames and the execution stack work.
The document discusses Unix domain sockets and provides examples of client-server communication using Unix domain streams and datagrams, including passing file descriptors between processes and receiving sender credentials; it also describes the socket address structure for Unix domain sockets and functions like socketpair() and socket() for Unix domain communication on a single host.
The document discusses code for a Java program using NetBeans and MySQL. It includes code to connect to a MySQL database, display data in a table, and buttons to add and update records. The author needs help adding code for a button to delete records by contract number, which is an auto-incrementing field in MySQL.
This document provides examples of built-in functions and decorators in Python like map, filter, all, any, getattr, hasattr, setattr, callable, isinstance, issubclass, closures, and memoization decorators. It demonstrates how to use these functions and decorators through examples. Built-in functions like map, filter and decorators allow extending functionality of functions. Closures enable functions to remember values in enclosing scopes. The @decorator syntax is demonstrated to be equivalent to applying a function to another function.
Giordano Scalzo introduces himself as an iOS developer and provides a swift introduction to the Swift programming language. He demonstrates various Swift features through code examples, including functions, closures, classes, structs, enums, generics, and operator overloading. He also discusses unit testing support in Swift through XCTest and Quick. To conclude, he proposes coding a reverse polish notation calculator to demonstrate applying these Swift concepts.
Terminology such as statements, grammar, syntax, and semantics are introduced. The document then discusses the basic components of a compiler including lexical analysis, syntactic analysis, and code generation. Lexical analysis scans source code and identifies tokens. Syntactic analysis recognizes language constructs through techniques like operator precedence parsing and recursive descent parsing.
Presentation about JNI basics for JDD 2018 09.10.2018.
Main topics:
- calling native methods from Java and vice versa
- exception handling
- accessing Java objects and arrays from native
Presented at DevWeek (25th March 2015)
These days, testing is considered a sexy topic for programmers. Who’d have thought it? But what makes for good unit tests (GUTs)? There’s more to effective unit testing than just knowing the assertion syntax of a testing framework.
Testing represents a form of communication and, as such, it offers multiple levels and forms of feedback, not just basic defect detection. Effective unit testing requires an understanding of what forms of feedback and communication are offered by tests, and what styles encourage or discourage such qualities.
What style of test partitioning is most common, and yet scales poorly and is ineffective at properly expressing the behaviour of a class or component? What styles, tricks and tips can be used to make tests more specification-like and can scale as the codebase grows?
This session will address these questions and outline exactly what makes a good unit test.
The document discusses different selection control structures in C++ including if, if-else, nested if, and switch statements, providing examples of how each works and when they are used to direct program execution based on evaluating conditions. Simple if statements execute code when a condition is true, if-else adds an else block for when it's false, nested if can check multiple conditions, and switch compares a value to multiple possible cases.
ZIO: Powerful and Principled Functional Programming in ScalaWiem Zine Elabidine
This is an introduction of purely functional programming type safe abstractions that provide a variety of features for building asynchronous and concurrent applications data structures built on ZIO.
You'll learn by examples about the power of functional programming to solve the hard problems of software development in a principled, without compromises.
Traditional performance management focuses on setting individual objectives and assessing achievement. While intended to increase control, identify problems early, align goals, motivate employees, and provide clear standards, in reality managers are reluctant to give honest feedback and employees do not believe managers are qualified to evaluate them. Only 30% of workers feel performance management helps improve performance. Automated performance management aims to implement best practices more easily and improve feedback quality. A study of Pakistani industries found positive relationships between effective management by objectives practices, organizational productivity, and employee performance. The balanced scorecard measures performance across financial, customer, internal process, and learning/growth perspectives. 360 degree feedback involves confidential, anonymous feedback from subordinates, peers, and supervisors to provide development insights.
Rs. 750/-
Balcony Rs. 500/-
1) The document describes 10 programming experiments involving Java concepts like variables, data types, control structures, methods, classes, arrays, file handling etc.
2) The experiments involve developing applications like a calculator, compound interest calculator, transport charge calculator, pattern generator, digit sum calculator, prime number generator, e-learning application, list box application, billing application with radio buttons, and a movie ticket booking system.
3) Each experiment provides the objective, task to be completed, sample interface, and the Java code with methods required to develop the given application.
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov Elixir Club
The document discusses clustering in Erlang and Elixir. It defines a cluster as a set of connected computers that work together. It describes different types of clusters and how to start nodes, connect nodes, send messages between nodes, and call functions remotely. It provides examples of monitoring nodes, pinging nodes, and getting node names. Distributed nodes running on different hosts can be connected by configuring /etc/hosts and ~/.hosts.erlang. Libraries like bitwalker/swarm and bitwalker/libcluster can help with clustering worker processes.
This document provides an overview and introduction to CoffeeScript, a programming language that compiles to JavaScript. It shows how CoffeeScript code compiles to equivalent JavaScript code, and demonstrates CoffeeScript features like functions, classes, and object-oriented programming. The document introduces CoffeeScript syntax for arrays, objects, loops, and functions, and compares syntax to JavaScript. It also covers CoffeeScript concepts like scoping, context, and class-based object-oriented programming using prototypes.
This document describes techniques for creating rootkits on Linux x86 systems. It discusses obtaining the system call table, hooking system calls through various methods like direct modification of the table, inline hooking of system call code, and patching the system call handler. It also presents the idea of abusing debug registers to generate exceptions and intercept system calls. The goal is to conceal running processes, files, and other system data from detection.
This document provides a summary of a presentation on object-oriented programming (OOP) and clean code given at IPB Computer Science on March 28, 2017. It introduces the speaker, Ifnu Bima, and his background working at Deutsche Bank and blibli.com. The presentation covers topics like code quality metrics, meaningful naming conventions, high-quality functions, comments, and unit testing. It emphasizes writing code that is easy to maintain and modify over time to prevent issues like bugs and technical debt.
1. The document describes a hospital management project created in Java to keep records of patients' information like BP, weight, case number, etc. and allow printing prescriptions and bills.
2. It includes coding for a splash screen, login frame, two admin forms for adding/deleting users, and frames for registering new patients, deleting patient accounts, and viewing pending patients.
3. The coding connects to a Java database, implements prepared statements to query and update tables storing user passwords and patient data, and uses various Swing components like text fields and buttons.
Pointer variables store memory addresses and can be used to indirectly access other variables. Pointers allow values to be passed by reference into functions rather than by value. Arrays can be accessed using pointers by treating the array name as a pointer to its first element. Dynamic memory allocation with new/delete operators allows pointers to reference variables in heap memory.
The document discusses input and output statements in C++. It explains that the iostream library includes cout and cin for standard output and input. cout uses the insertion operator << to output data to the screen, while cin uses the extraction operator >> to input data from the keyboard. The document provides examples of using cout and cin to output text, numbers, and calculate values from user input.
The document discusses coroutines in Python. It describes how coroutines can have multiple entry points using the await keyword, and how the Python interpreter suspends and resumes coroutine execution. It also provides an example coroutine program that defines two coroutines that print messages before and after sleeping for different durations. The document then analyzes the coroutine execution using the inspect module and disassembler to illustrate how coroutine frames and the execution stack work.
The document discusses Unix domain sockets and provides examples of client-server communication using Unix domain streams and datagrams, including passing file descriptors between processes and receiving sender credentials; it also describes the socket address structure for Unix domain sockets and functions like socketpair() and socket() for Unix domain communication on a single host.
The document discusses code for a Java program using NetBeans and MySQL. It includes code to connect to a MySQL database, display data in a table, and buttons to add and update records. The author needs help adding code for a button to delete records by contract number, which is an auto-incrementing field in MySQL.
This document provides examples of built-in functions and decorators in Python like map, filter, all, any, getattr, hasattr, setattr, callable, isinstance, issubclass, closures, and memoization decorators. It demonstrates how to use these functions and decorators through examples. Built-in functions like map, filter and decorators allow extending functionality of functions. Closures enable functions to remember values in enclosing scopes. The @decorator syntax is demonstrated to be equivalent to applying a function to another function.
Giordano Scalzo introduces himself as an iOS developer and provides a swift introduction to the Swift programming language. He demonstrates various Swift features through code examples, including functions, closures, classes, structs, enums, generics, and operator overloading. He also discusses unit testing support in Swift through XCTest and Quick. To conclude, he proposes coding a reverse polish notation calculator to demonstrate applying these Swift concepts.
Terminology such as statements, grammar, syntax, and semantics are introduced. The document then discusses the basic components of a compiler including lexical analysis, syntactic analysis, and code generation. Lexical analysis scans source code and identifies tokens. Syntactic analysis recognizes language constructs through techniques like operator precedence parsing and recursive descent parsing.
Presentation about JNI basics for JDD 2018 09.10.2018.
Main topics:
- calling native methods from Java and vice versa
- exception handling
- accessing Java objects and arrays from native
Presented at DevWeek (25th March 2015)
These days, testing is considered a sexy topic for programmers. Who’d have thought it? But what makes for good unit tests (GUTs)? There’s more to effective unit testing than just knowing the assertion syntax of a testing framework.
Testing represents a form of communication and, as such, it offers multiple levels and forms of feedback, not just basic defect detection. Effective unit testing requires an understanding of what forms of feedback and communication are offered by tests, and what styles encourage or discourage such qualities.
What style of test partitioning is most common, and yet scales poorly and is ineffective at properly expressing the behaviour of a class or component? What styles, tricks and tips can be used to make tests more specification-like and can scale as the codebase grows?
This session will address these questions and outline exactly what makes a good unit test.
The document discusses different selection control structures in C++ including if, if-else, nested if, and switch statements, providing examples of how each works and when they are used to direct program execution based on evaluating conditions. Simple if statements execute code when a condition is true, if-else adds an else block for when it's false, nested if can check multiple conditions, and switch compares a value to multiple possible cases.
ZIO: Powerful and Principled Functional Programming in ScalaWiem Zine Elabidine
This is an introduction of purely functional programming type safe abstractions that provide a variety of features for building asynchronous and concurrent applications data structures built on ZIO.
You'll learn by examples about the power of functional programming to solve the hard problems of software development in a principled, without compromises.
Traditional performance management focuses on setting individual objectives and assessing achievement. While intended to increase control, identify problems early, align goals, motivate employees, and provide clear standards, in reality managers are reluctant to give honest feedback and employees do not believe managers are qualified to evaluate them. Only 30% of workers feel performance management helps improve performance. Automated performance management aims to implement best practices more easily and improve feedback quality. A study of Pakistani industries found positive relationships between effective management by objectives practices, organizational productivity, and employee performance. The balanced scorecard measures performance across financial, customer, internal process, and learning/growth perspectives. 360 degree feedback involves confidential, anonymous feedback from subordinates, peers, and supervisors to provide development insights.
Mobile learning story board week 8 & 9Jan Cutforth
Mobile learning allows students to learn anywhere at any time through their smartphones. Research shows mobile learning has positive impacts on education by making it more personalized and technology-focused. As smartphones became more advanced after 2010, their use in education increased. For mobile learning to be widely adopted, it must be implemented gradually starting with innovators and early adopters before reaching critical mass. Change agents like teachers and administrators can encourage adoption by demonstrating mobile learning's benefits.
Sharing all of the info gathered around workshops, speaker panels, and networking events at South by Southwest Interactive. This will include topics from iPad to UX to Social Media to Gaming to the next big things.
The document discusses several theories of entrepreneurship including economic, sociological, psychological, innovation, and motivation theories. The economic theory states that entrepreneurship is influenced by economic conditions and incentives. The sociological theory argues that culture and social values impact entrepreneurial behavior. Psychological theory suggests individuals with characteristics like achievement motivation and vision are more likely to become entrepreneurs. Innovation theory proposed by Schumpeter sees entrepreneurs as innovative and creative drivers of economic development through new products, processes, markets and organizations. Motivation theory by McClelland emphasizes the role of achievement motivation in successful entrepreneurship. [/SUMMARY]
This document provides an overview of input and output in C++ using iostream.h. It discusses the basic input/output objects like cout, cin, and cerr. It covers the insertion and extraction operators for outputting and inputting different data types. It also describes various format flags and manipulators that can be used to control the formatting of output, like setting the number base, width, precision and justification. The document concludes by discussing file input/output using fstream.h and how to open, read from, write to and close files.
Elixir is a functional programming language that is well-suited for building scalable and fault-tolerant applications. The document provides an introduction to Elixir by discussing its roots in Erlang and how it builds upon Erlang's strengths like concurrency, distribution, and fault tolerance. It also demonstrates some basic Elixir concepts like functions, pattern matching, recursion, and the BEAM virtual machine. Finally, it provides examples of real-world applications of Elixir like building Phoenix web applications and developing embedded hardware projects with Nerves.
This document provides an overview of input and output in C++ using iostream.h instead of stdio.h. It discusses the standard iostream objects like cout and cin for output and input. It covers using the insertion and extraction operators << and >> for output and input. It also describes various format flags and manipulators that can be used to control formatting of output, like integer base, floating point precision, and justification.
This document provides an overview of using Python and GTK to build graphical user interfaces (GUIs). Some key points:
- GTK is a cross-platform GUI toolkit that can be used with Python to develop applications for Linux, Windows, and Mac.
- The document demonstrates basic GTK widgets like windows, buttons, labels and layout containers. It also covers using event handlers and object-oriented programming with GTK.
- More advanced topics covered include using threads to prevent the GUI from freezing during long operations, loading interfaces from UI files, and building a weather checking application with model-view architecture.
Every software developer enjoys finding new and clever ways to solve problems. Writing code using his/her wits, intelligent and creativity. However, sometimes being too clever can lead to hard to track bugs, maintainability issues and impossible to understand code. Is all cleverly written code good code, or is it a problem just waiting to happen? In this session, I will show you real world examples of cleverly written code. And show you how we can use clean code principles, refactoring and design patterns, to transform that code from clever code to good code – one that your peers and future self would thank you for writing.
This document discusses Python-GTK and provides information about:
- Installing necessary packages like python-pywapi and glade
- Links to the author Yuren Ju's online profiles
- An assumption that the audience has experience with at least one programming language
- A graph showing Python's popularity based on the TIOBE index
- Comments from others that Python is suitable for beginners and experts alike and is flexible
- Examples of successful projects using Python including the author's first experience four years ago
The document discusses analyzing crashes using WinDbg. It provides tips on reconstructing crashed call stacks and investigating what thread or lock is causing a hang. The debugging commands discussed include !analyze, !locks, .cxr, kb to find the crashing function and stuck thread.
- The document describes the process of compiling an ONNX model to XCVM using the Chainer compiler. It involves parsing the ONNX model, applying optimization passes like fusion and constant propagation, lowering it to an XCVM program, and then executing the program on XCVM to run the model.
- The compiler represents the model as a Model object containing a Graph. Nodes in the graph are represented by Node objects. Values are represented by Value objects. Tensor data is stored in Tensor objects.
- The XCVM execution engine takes the compiled XCVM program and runs it, interpreting each XCVM operation by calling methods on classes like ConvOp that implement the operations.
This document discusses binary vulnerabilities and methods for identifying and exploiting them. It covers topics like stack overflows, heap overflows, integer overflows, and pointer vulnerabilities. It also discusses vulnerability metrics, identifiers, and tools that can be used for analysis like fuzzers, symbolic execution, and decompilers. Exploitation techniques like bypassing protections and transferring control are also mentioned.
This document discusses binary vulnerabilities and methods for finding and exploiting them. It covers different types of vulnerabilities like stack overflows, heap overflows, and integer overflows. It also discusses vulnerability metrics, identifiers, and tools that can be used to analyze binaries both statically and dynamically like fuzzers, symbolic execution, and taint analysis. Exploitation techniques like bypassing protections and ROP are also mentioned.
This document describes a project called ZoneIDAProc that aims to provide an interface for accessing internal process states. It discusses related work, the problem statement, design, implementation details, examples, and conclusions. The key points are that ZoneIDAProc will export a Linux proc-like interface to allow querying and manipulating a process's internal states through code instrumentation and a virtual file system without requiring debug symbols. It provides examples of basic read/write access, monitoring a main thread with a spy thread, exploring process symbols, and fully instrumenting and accessing a target program.
Dr. Hsieh is teaching how to use the state-of-the-art libraries, Spark by Apache, to conduct data analysis on hadoop platform in ISSNIP 2015, Singapore. He started with teaching the basic operations like “map, reduce, flatten, and more,” followed by explaining the extension of Spark, including MLib, GraphX, and SparkSQL.
Big Data Day LA 2016/ Hadoop/ Spark/ Kafka track - Data Provenance Support in...Data Con LA
Debugging data processing logic in Data-Intensive Scalable Computing (DISC) systems is a difficult and time consuming effort. To aid this effort, we built Titian, a library that enables data provenance tracking data through transformations in Apache Spark.
Twisted is an event-driven networking engine written in Python. It provides tools for developing asynchronous network applications including an asynchronous I/O core, Deferreds (promises and pipelines), and implementations of many common protocols like HTTP, FTP, SMTP, POP3, IMAP, SSH, DNS, IRC, NNTP, XMPP, and more. Twisted also includes frameworks for application development, services, plugins, remote procedure calls (RPC), threads, databases, and a web server.
Twisted is an event-driven networking engine written in Python. It provides tools for developing asynchronous network applications and services. Some key features of Twisted include an asynchronous reactor framework, support for deferreds/promises, common network protocols and services implemented, and application framework for building services.
Similar to A proposal of the OpenFlow controller development support tool (20)
FPGA based 10G Performance Tester for HW OpenFlow SwitchYutaka Yasuda
SDN operators need to measure the performance of OF HW switch on their site. Cause there is 1000 times differences in latency, depends on the specified flow entry. ASIC can forward in several μsecs but the software (CPU) may take msec.
To protect yourself from unexpected performance plunge, monitor your switches healthiness on your site.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxSitimaJohn
Ocean Lotus cyber threat actors represent a sophisticated, persistent, and politically motivated group that poses a significant risk to organizations and individuals in the Southeast Asian region. Their continuous evolution and adaptability underscore the need for robust cybersecurity measures and international cooperation to identify and mitigate the threats posed by such advanced persistent threat groups.
5th LF Energy Power Grid Model Meet-up SlidesDanBrown980551
5th Power Grid Model Meet-up
It is with great pleasure that we extend to you an invitation to the 5th Power Grid Model Meet-up, scheduled for 6th June 2024. This event will adopt a hybrid format, allowing participants to join us either through an online Mircosoft Teams session or in person at TU/e located at Den Dolech 2, Eindhoven, Netherlands. The meet-up will be hosted by Eindhoven University of Technology (TU/e), a research university specializing in engineering science & technology.
Power Grid Model
The global energy transition is placing new and unprecedented demands on Distribution System Operators (DSOs). Alongside upgrades to grid capacity, processes such as digitization, capacity optimization, and congestion management are becoming vital for delivering reliable services.
Power Grid Model is an open source project from Linux Foundation Energy and provides a calculation engine that is increasingly essential for DSOs. It offers a standards-based foundation enabling real-time power systems analysis, simulations of electrical power grids, and sophisticated what-if analysis. In addition, it enables in-depth studies and analysis of the electrical power grid’s behavior and performance. This comprehensive model incorporates essential factors such as power generation capacity, electrical losses, voltage levels, power flows, and system stability.
Power Grid Model is currently being applied in a wide variety of use cases, including grid planning, expansion, reliability, and congestion studies. It can also help in analyzing the impact of renewable energy integration, assessing the effects of disturbances or faults, and developing strategies for grid control and optimization.
What to expect
For the upcoming meetup we are organizing, we have an exciting lineup of activities planned:
-Insightful presentations covering two practical applications of the Power Grid Model.
-An update on the latest advancements in Power Grid -Model technology during the first and second quarters of 2024.
-An interactive brainstorming session to discuss and propose new feature requests.
-An opportunity to connect with fellow Power Grid Model enthusiasts and users.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/building-and-scaling-ai-applications-with-the-nx-ai-manager-a-presentation-from-network-optix/
Robin van Emden, Senior Director of Data Science at Network Optix, presents the “Building and Scaling AI Applications with the Nx AI Manager,” tutorial at the May 2024 Embedded Vision Summit.
In this presentation, van Emden covers the basics of scaling edge AI solutions using the Nx tool kit. He emphasizes the process of developing AI models and deploying them globally. He also showcases the conversion of AI models and the creation of effective edge AI pipelines, with a focus on pre-processing, model conversion, selecting the appropriate inference engine for the target hardware and post-processing.
van Emden shows how Nx can simplify the developer’s life and facilitate a rapid transition from concept to production-ready applications.He provides valuable insights into developing scalable and efficient edge AI solutions, with a strong focus on practical implementation.
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Speck&Tech
ABSTRACT: A prima vista, un mattoncino Lego e la backdoor XZ potrebbero avere in comune il fatto di essere entrambi blocchi di costruzione, o dipendenze di progetti creativi e software. La realtà è che un mattoncino Lego e il caso della backdoor XZ hanno molto di più di tutto ciò in comune.
Partecipate alla presentazione per immergervi in una storia di interoperabilità, standard e formati aperti, per poi discutere del ruolo importante che i contributori hanno in una comunità open source sostenibile.
BIO: Sostenitrice del software libero e dei formati standard e aperti. È stata un membro attivo dei progetti Fedora e openSUSE e ha co-fondato l'Associazione LibreItalia dove è stata coinvolta in diversi eventi, migrazioni e formazione relativi a LibreOffice. In precedenza ha lavorato a migrazioni e corsi di formazione su LibreOffice per diverse amministrazioni pubbliche e privati. Da gennaio 2020 lavora in SUSE come Software Release Engineer per Uyuni e SUSE Manager e quando non segue la sua passione per i computer e per Geeko coltiva la sua curiosità per l'astronomia (da cui deriva il suo nickname deneb_alpha).
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
National Security Agency - NSA mobile device best practices
A proposal of the OpenFlow controller development support tool
1. A proposal of the OpenFlow controller development support tool
- using Logic and Flow ID label -
Yutaka Yasuda, Kyoto Sangyo University
2. Introduction
• OpenFlow
Switch control mechanism by software program
• Problem of controller programming
Programmer does not have any method to confirm how
reflected their code to the flow control, directly and
intuitively
“This code, how does work on... which flow?”
“This flow, which code does make it?”
3. Goal of today : development support tool proposal
• bind code to flow control information
• enable to trace the affected flow
Controller
sw1 sw3
host1 host3
host2 host4
sw2 sw4
5. ex. : simple 2 ports switch and typical code for that
1 2
(inport=1) [output=2] convention of here :
(inport=2) [output=1] (match fields) [actions]
NOX like pseudo code:
def packet_in_callback(dpid, inport, reason, len, bufid, packet): callback
flow = extract_flow(packet)
make match fields
flow[core.IN_PORT] = inport
if inport == 1 :
outport = 2
else: make actions
outport = 1
actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
inst.install_datapath_flow(dpid, flow,..., actions, ...) set flow entry
return CONTINUE
6. Logic ID label setting
def packet_in_callback(dpid, inport, reason, len, bufid, packet
flow = extract_flow(packet)
flow[core.IN_PORT] = inport
if inport == 1 :
(inport=1) [output=2] outport = 2
else:
(inport=2) [output=1] outport = 1
actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
inst.install_datapath_flow(dpid, flow,..., actions, ...)
return CONTINUE
You can see the correspondence relation between code and flow entry
7. Logic ID label setting
def packet_in_callback(dpid, inport, reason, len, bufid, packe
flow = extract_flow(packet)
flow[core.IN_PORT] = inport
if inport == 1 :
inst.markLogicPoint( 101 )
#101 (inport=1) [output=2] outport = 2
#102 (inport=2) [output=1] else:
inst.markLogicPoint( 102 )
outport = 1
actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
inst.install_datapath_flow(dpid, flow,..., actions, ...)
return CONTINUE
Insert the function to set the Logic ID label to flow entry
8. Logic ID label setting
def packet_in_callback(dpid, inport, reason, len, bufid, packe
flow = extract_flow(packet)
flow[core.IN_PORT] = inport
if inport == 1 :
inst.markLogicPoint( 101 )
#101 (inport=1) [output=2] outport = 2
#102 (inport=2) [output=1] else:
inst.markLogicPoint( 102 )
outport = 1
actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
inst.install_datapath_flow(dpid, flow,..., actions, ...)
return CONTINUE
#102 ( inport=1 ) [ outport=2 ]
flow entry: cookie Match Fields Counters Actions
(64bits)
Cookie field is good to keep the label information
9. Result : cross reference of code and flow entries
switch controller program
1
flow entries 6
cookie match fields, etc..
2 7
(inport=1) [ outport=6 ]
3 8
101 ………………… def getOutport(dpid, vport, packet):
9 if not OPORTS.has_key(dpid):
4 ………………… log.err('Unknown dpid=%x on getoutput' % (dpid),system='paniersw')
return False
5 ………………… 10 if not OPORTS[dpid].has_key(vport):
log.err('Invalid (dpid,vport)=(%x,%d) on getOutport' % (dpid, vport),system='paniersw')
………………… return False
ops=OPORTS[dpid][vport]
for (rule, outport, cookie) in ops:
if rule == RULE80 and testTCPport(80, packet):
inst.setLogicMark( 101 )
return (outport, cookie)
elif rule == RULE443 and testTCPport(443, packet):
inst.setLogicMark( 102 )
return (outport, cookie )
Reference from flow to code can tell : elif rule == RULE25 and testTCPport(25, packet):
“This flow entry comes from this code” return (outport, cookie)
elif rule == ANY:
return (outport, cookie)
return False
Reference from code to flow can tell :
“Which flow entries are affected by this code”
def forward_l2_packet(dpid, inport, vport, packet, buf, bufid):
dstaddr = packet.dst.tostring()
if not ord(dstaddr[0]) & 1 and inst.st[dpid].has_key(dstaddr):
prt = inst.st[dpid][dstaddr]
if prt[0] == vport:
inst.setLogicMark( 122 )
log.err('**warning** learned port = inport', system="paniersw")
myFlood(dpid, bufid, buf, vport, packet)
else:
inst.setLogicMark( 123 )
log.msg('installing flow for ' + str(packet), system="paniersw")
10. Single branch : OK
switch controller program
1
flow entries 6
cookie match fields, etc..
2 7
(inport=1) [ outport=6 ]
3 8
101 ………………… def getOutport(dpid, vport, packet):
9 if not OPORTS.has_key(dpid):
4 ………………… log.err('Unknown dpid=%x on getoutput' % (dpid),system=
return False
5 ………………… 10 if not OPORTS[dpid].has_key(vport):
log.err('Invalid (dpid,vport)=(%x,%d) on getOutport' % (dpid
………………… return False
ops=OPORTS[dpid][vport]
for (rule, outport, cookie) in ops:
if rule == RULE80 and testTCPport(80, packet):
inst.setLogicMark( 101 )
return (outport, cookie)
elif rule == RULE443 and testTCPport(443, packet):
inst.setLogicMark( 102 )
return (outport, cookie )
elif rule == RULE25 and testTCPport(25, packet):
return (outport, cookie)
A recorded Logic ID directly means the branch path that elif rule == ANY:
the code actually passed through. return (outport, cookie)
return False
(Programmer puts the Logic ID record function to the
important and memorable points of the code. ) def forward_l2_packet(dpid, inport, vport, packet, buf, bufid):
dstaddr = packet.dst.tostring()
if not ord(dstaddr[0]) & 1 and inst.st[dpid].has_key(dstaddr):
prt = inst.st[dpid][dstaddr]
if prt[0] == vport:
inst.setLogicMark( 122 )
log.err('**warning** learned port = inport', system="panie
myFlood(dpid, bufid, buf, vport, packet)
else:
inst.setLogicMark( 123 )
log.msg('installing flow for ' + str(packet), system="panie
11. Multiple branches : needs the past record
def getOutport(dpid, vport, packet):
if not OPORTS.has_key(dpid):
log.err('Unknown dpid=%x on getoutput' % (dpid),s
return False
if not OPORTS[dpid].has_key(vport):
log.err('Invalid (dpid,vport)=(%x,%d) on getOutport'
return False
102 ops=OPORTS[dpid][vport]
flow entries
1 6 101 for (rule, outport, cookie) in ops:
if rule == RULE80 and testTCPport(80, packet):
cookie match fields, etc.. inst.setLogicMark( 101 )
2 7 return (outport, cookie)
(inport=1) [ outport=6 ] elif rule == RULE443 and testTCPport(443, packet):
3 8 inst.setLogicMark( 102 )
101 …………………
return (outport, cookie )
4 ………………… 9 elif rule == RULE25 and testTCPport(25, packet):
return (outport, cookie)
………………… 10 elif rule == ANY:
5 return (outport, cookie)
………………… return False
def forward_l2_packet(dpid, inport, vport, packet, buf, bu
dstaddr = packet.dst.tostring()
123 125 if not ord(dstaddr[0]) & 1 and inst.st[dpid].has_key(dsta
overwriting prt = inst.st[dpid][dstaddr]
if prt[0] == vport:
123 122 inst.setLogicMark( 122 )
log.err('**warning** learned port = inport', system
myFlood(dpid, bufid, buf, vport, packet)
If memorable points are (multiple) exists and located them else:
inst.setLogicMark( 123 )
the isolated branch, it needs to record the both of them. (in log.msg('installing flow for ' + str(packet), system=
right figure, 101 and 123 are.) flow = extract_flow(packet)
flow[core.IN_PORT] = inport
(outport, cookie) = getOutport(dpid, prt[0], packe
It is not good to overwrite by the recent single label (123). actions = [[openflow.OFPAT_OUTPUT, [0, outport
inst.install_datapath_flow(dpid, flow, CACHE_TIM
openflow.OFP_FLOW_PERMAN
bufid, openflow.OFP_DEFAULT_
inport, buf, cookie)
else:
inst.setLogicMark( 124 )
myFlood(dpid, bufid, buf, vport, packet)
12. Queuing for multiple label recording
overwriting queuing
1
flow entries 6 1 6
cookie match fields, etc.. cookie match fields, etc..
2 7 2 7
(inport=1) [ outport=6 ] (inport=1) [ outport=6 ]
3 8 3 8
101 ………………… 101,123 …………………
4 ………………… 9 4 ………………… 9
5 ………………… 10 5 102,124 ………………… 10
………………… …………………
123
overwriting 123
(8 x 8 bits)
... ... ... ... ... ... 101 123
38 queuing
To keep the past record, Logic ID label will be queuing to Cookie field (64bits). The right figure shows the
typical case, 8bits label queuing in 8 stages. The combination of bit width and the number of stages are
flexible to fit the target controller program.
13. Restrictions : binding code and flow entry
• Some controller SDKs may use Cookie for their purpose
Floodlight uses 32bits (12bit AppID, 20bit reserve)
• Increase switch loads to collect information
“In short, the existing statistics mechanisms are (both)
relatively high overhead” (J. Mogul et al., 2010)
J. Mogul et al. “DevoFlow: Cost-Effective Flow Management for High Performance
Enterprise Networks”, In Proc. ACM SIGCOMM HotNets-IX, 2010
15. Flow tracing (idea)
• Demand : want to see what happen on the flow from here on
Now, flow entries and code are ready to refer each other by
this proposal
Next, want to observe the behavior of flows after then
• Problem : Flow entries have insufficient info to reconstruct
the original path
• Reason : Wildcards and Maskbits
There are many cases which cannot figure out the correct
path from flow entry info on switches
16. Wildcard
Flow merging by wildcards / maskbits
• Typical case to fail to trace the flow path
There are wildcards in different match fields and it makes fail to reconstruct the
original flow path correctly, to check up flow entries in two switches
Ex: The upper flow of sw1 (to 1.0.0.1) will be split into multi flows on sw2. (red lines)
And flow entries of sw2 includes the other flows. (blue lines)
Nobody knows how many packets will go upper flow of sw1 to upper flow (port 80) of sw2.
sw1 sw2
host1 1 4 1 4 to http proxy
(1.0.0.1, *, *) [#4] (*, 80, *) [#4]
2 5 2 5
3 (1.0.0.2, *, *) [#4] 6 3 (*, 25, *) [#5] 6 to smtp gateway
host2
convention : ( IP, src port, dst port ) [ outport ]
note:
If all flow entries specify the same match fields set, it is possible to check up completely.
Typical case of that is “all flows specify all match fields exactly”.
17. Flow tracing (how to)
• Set the label to packet and bring it by packet themselves to
the next hop
• Label setting and detecting should be done by switch
It means label should be on the field of flow entry
• Set the label by “Action” then send to the next switch
• Detect the labeled flow by “Match Fields” then treat it
separately from unlabeled flow
18. Wildcard
Flow separation under wildcards / maskbits
• Separation the flow by the label
The separated flow entry will be made in the next switch,
then it is fully traceable
Ex : The case a flow will be split on the next switch. (red line)
All “5” labeled packets will make only “5” matching flow entries on sw2
And “5” labeled flows on sw2 does not include any unlabeled flow.
sw1 sw2
host1 1 4 1 (*, 80, *, 5) [ =, #4] 4 to http proxy
(1.0.0.1, *, *, 0) [5, #4]
2 5 2 5
(*, 80, *, 0) [ =, #4]
3 (1.0.0.2, *, *, 0) [=, #4] 6 3 6 to smtp gateway
host2 (*, 25, *, 5) [ =, #5]
(*, 25, *, 0) [ =, #5]
convention : ( IP, src port, dst port, label ) [ label, outport ]
19. Flow tracing (the structure)
flow table
flow table
(to servers)
flow table
flow table
Controller
(to servers)
cookie Match Counter Action cookie Match Counter Action
101, 123 IP(dst)=X out=6 ????? ????? out=3
Packets have info for tracing and it will be a key to check up flow entries of switches
20. Ex : select outport by IP and the code for it
convention :
1 (1.0.0.1, *, * ) [ #4] 4
(IP, port-dst, port-src) [ #outport ]
2 5
3 6
def packet_in_callback(dpid, inport, reason, len, bufid, packet):
match = extract_flow(packet)
iph = packet.find('ipv4')
if ip_to_str(iph.dstip) == "1.0.0.1" :
outport = 4
else
outport = 5
actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
inst.install_datapath_flow(dpid, flow,..., actions, ...)
return CONTINUE
Here is a switch that selects output port depends on the destination IP address of the packet
21. Flow ID Label setting
def packet_in_callback(dpid, inport, reason, len, bufid, packet):
match = extract_flow(packet)
iph = packet.find('ipv4')
if ip_to_str(iph.dstip) == "1.0.0.1" :
outport = 4
inst.markFlowLabel( 5 )
(1.0.0.1, *, *, 0 ) [ 5, #4] else
outport = 5
actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
inst.install_datapath_flow(dpid, flow,..., actions, ...)
return CONTINUE
( label=0 ) [ set label=5 ]
flow entry: Match Fields Counters Actions
Insert the function to set the Flow ID Label and the label will be set by Action feature of the switch
22. The place to record the Flow ID label
• Use ToS field (6bits) for IPv4
OpenFlow supports ToS as Match Field and Action
Not regularly used than other fields
• It is possible to use VLAN id or MPLS label but....
Very commonly used for OpenFlow applicable field, such as
datacenter
unexpected VLAN or MPLS tag insertion may occur some
malfunctions to existing controller programs
• for IPv6, Flow Label (20bits) is good to use
23. Label overlapping : assigning to bit
• Overlapping : set different labels to single flow by multiple
switches
Cannot overwrite existent label info
• Label as bit pattern
label=n means ToS=2^(n-1)
independently writable for overlapping case
• Very few labels to able to set (ToS has only 6 bits!)
Use string label in the code, dynamically assign the number
when it turned on
Turn on/off by remote operation of controller program
24. Restriction : Tracing flow over the switch
• Diverted field does not usable for original purpose
( v4: ToS / v6: flowlabel)
• Need to remove the label on the edge
To prevent fail-reaction by the ToS value at the outside of
the target Open Flow network
There are some topology investigation researches
. OFDP : OpenFlow Discovery Protocol by GENI
. Topology module by Trema (LLDP base)
• Not applicable for not IP protocols
25. For not IP protocols?
• Ideally...”Should propose to add flow-id-field as OF std.”
It's a chicken and egg situation
New spec might not applicable on existent switch
• Realistically... “not a big issue?”
OpenFlow is focusing IP (v4) strongly
In L2 use case, processed by exact match of MACs
(label does not required, just checking them up is enough)
26. Full picture
20=2^(5-1)
cookie Match Counter Action +2^(3-1)
99, 121 tos=16 tos=20
if dpid == 25
markLogicPoint( 121 )
markFlowLabel( 3 ) dpid 25
else if dpid == 11
markLogicPoint( 101 ) Controller
markFlowLabel( 5 )
dpid 11
cookie Match Counter Action cookie Match Counter Action
16=2^(5-1)
88, 101 tos=0 tos=16 tos=16 ( keep tos )
27. OpenFlow standard !
System layout
red color means flow table flow table
“this part should
be implemented”
Controller
flow table flow table
label Controller
on/off App
operation tool
console
Controller SDK
flow table
aggregator
statistics data
visualizer
28. Conclusion
• Proposed the OpenFlow Controller development support tool
• Basic design of the mechanism for binding code and flow
It enables cross referencing the logic and flow each other
It enables tracing the flow over switches
• Required preparation
Need to add some functions to controller SDK
• To use this feature
Insert the function call to your code lines, but that’s all
No special requirement for switch, just OpenFlow capability
29. Conclusion
• Future work
• Finishing up the NOX implementation
• Confirming the applicability for other SDK by porting
• Visualization
• Proposing a new “flow id field” as OF switch standard
on/off Controller App flow table flow table
operation tool
console Controller SDK flow table flow table
statistics data
flow table
visualizer aggregator
31. if you have any interest of this idea,
porting to the other controller,
visualization,
making a commercial product,
or joint research,
feel free to contact me please.